C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++で[l, r]範囲内のASCII値を持つ文字をカウントして出力する方法

任意の長さの文字列が与えられたとき、その中からASCII値が指定範囲 [l, r] に含まれる文字を数え、該当する文字を出力します。本記事では、C++を用いてこの問題を解くための手順とサンプルコードをわかりやすく解説します。

英字のASCII値一覧

大文字 A〜Z のASCII値

ABCDEFGHIJKLM
65666768697071727374757677
NOPQRSTUVWXYZ
78798081828384858687888990

小文字 a〜z のASCII値

abcdefghijklm
979899100101102103104105106107108109
nopqrstuvwxyz
110111112113114115116117118119120121122

入力例と出力例

入力 − 文字列 str = "point"、First = 111、Last = 117
出力 − 指定範囲内の文字: p, o, t
   カウント数: 3

解説 − p、o、t はいずれも [111, 117] の範囲内に含まれるため、これらの3文字がカウントされます。

入力 − 文字列 str = "ABCZXY"、First = 65、Last = 70
出力 − 指定範囲内の文字: A, B, C
   カウント数: 3

解説 − A、B、C はいずれも [65, 70] の範囲内に含まれるため、これらの3文字がカウントされます。

プログラムで使用するアプローチ

  • 文字列と、範囲を作るための開始値・終了値を入力し、変数(ここでは str とします)に格納します。
  • length() 関数を使って文字列の長さを求めます。この関数は、スペースを含む文字数を整数値として返します。
  • 文字のカウント数を保持するための一時変数を用意します。
  • i を 0 から始め、i が文字列の長さより小さい間ループを繰り返します。
  • ループ内では、「start ≤ str[i]」かつ「str[i] ≤ end」が成り立つかどうかを判定します。
  • 条件が真であればカウントを1増やし、str[i] を出力します。
  • 最後にカウントを返します。
  • 結果を出力します。

サンプルコード

#include <iostream>
using namespace std;
// ASCII値が範囲 [l, r] 内にある
// 文字の個数をカウントする関数
int count_char(string str, int left, int right){
    // カウントを 0 で初期化
    int count = 0;
    int len = str.length();
    for (int i = 0; i < len; i++) {
        // 値が範囲内であれば
        // カウントを増加させる
        if (left <= str[i] and str[i] <= right) {
            count++;
            cout << str[i] << " ";
        }
    }
    // カウントを返す
    return count;
}
int main(){
    string str = "tutorialspoint";
    int left = 102, right = 111;
    cout << "Characters in the given range";
    cout << "\nand their count is " << count_char(str, left, right);
    return 0;
}

実行結果

上記のコードを実行すると、以下の出力が得られます。

Characters in the given range
and their count is o i l o i n 6

この例では、文字列 "tutorialspoint" のうち、範囲 [102, 111] に該当するのは o(111)、i(105)、l(108)、o(111)、i(105)、n(110)の6文字であり、カウント数は6となります。

  1. sin(x)とcos(x)の値を計算するC++プログラムの解説

    sin(x)とcos(x)の値を計算するC++プログラム 本記事では、角度を入力として受け取り、その角度に対応するsin(x)(正弦)とcos(x)(余弦)の値を計算して結果を表示するC++プログラムを解説します。ライブラリ関数に頼らず、テイラー展開(マクローリン展開)を用いて数値を近似する手法を紹介します。 sin(x)とは sin(x)は三角関数の一つで、角度xに対する正弦の値を求めるために使用されます。直角三角形では、斜辺に対する対辺の比として定義されます。 $$\sin (x) = \displaystyle\sum\limits_{k=0}^\infty \frac{(-1)^{k

  2. C++におけるリテラルと定数の違いとは?初心者向けにわかりやすく解説

    リテラルとは? リテラル(literal)とは、プログラムのコードの中に値そのものとして直接記述された値のことです。たとえば、数値の 25 や文字列の Hello World は、どちらもリテラルに該当します。 定数とは? 一方、定数(constant)は、リテラルに名前を付けて扱えるようにしたものです。プログラムの中で何度も参照する、決まっていて変更されない値がある場合には、リテラルをそのまま書き並べるのではなく、定数として宣言して使うのが良い習慣とされています。 たとえば、円の面積や円周などを計算するとき、プログラムのさまざまな場所で円周率を使用することになります。このように同じ値を繰