C++で[l, r]範囲内のASCII値を持つ文字をカウントして出力する方法
任意の長さの文字列が与えられたとき、その中からASCII値が指定範囲 [l, r] に含まれる文字を数え、該当する文字を出力します。本記事では、C++を用いてこの問題を解くための手順とサンプルコードをわかりやすく解説します。
英字のASCII値一覧
大文字 A〜Z のASCII値
| A | B | C | D | E | F | G | H | I | J | K | L | M |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 |
| N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 |
小文字 a〜z のASCII値
| a | b | c | d | e | f | g | h | i | j | k | l | m |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 |
| n | o | p | q | r | s | t | u | v | w | x | y | z |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 |
入力例と出力例
入力 − 文字列 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となります。
-
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
-
C++におけるリテラルと定数の違いとは?初心者向けにわかりやすく解説
リテラルとは? リテラル(literal)とは、プログラムのコードの中に値そのものとして直接記述された値のことです。たとえば、数値の 25 や文字列の Hello World は、どちらもリテラルに該当します。 定数とは? 一方、定数(constant)は、リテラルに名前を付けて扱えるようにしたものです。プログラムの中で何度も参照する、決まっていて変更されない値がある場合には、リテラルをそのまま書き並べるのではなく、定数として宣言して使うのが良い習慣とされています。 たとえば、円の面積や円周などを計算するとき、プログラムのさまざまな場所で円周率を使用することになります。このように同じ値を繰