2017年10月01日
《その58》 文字 '0' 〜 '9' を 数値に変換(p.314演習8-6,演習8-7)
新版明解C++入門編 p.314 演習8-6
文字列 s に含まれる文字 c の個数を返す関数 strch_cnt を作成せよ。
int strch_cnt(const char* s, char c);たとえば、文字列 s が "abcabca" で文字 c が 'a' であれば、返却するのは 3 である。文字 c が含まれない場合は 0 を返すこと。
【プログラムの仕様】
◆ スペース文字も含めた文字列を、キーボードから char str[128] に読み込む。
( 文字数はナル文字も含めて128文字までなので、
キーボードから127文字を超える入力はできない。)
◆ 128文字以上入力しても、127文字までしか受け取らないようにする。
この仕様を実現するために、
cin.getline(str, 128);
を利用します。
// p314_演習8-6
#include <iostream>
using namespace std;
int strch_cnt(const char* s, char c)
{
int n = 0;
while (*s) {
if (*s++ == c)
n++;
}
return n;
}
int main()
{
char str[128];
char c;
cout << "文字列を入力 : "; cin.getline(str, 128);
cout << "\n受け取った文字列 … " << str << '\n';
cout << "対象文字 : "; cin >> c;
cout << "\n個数 … " << strch_cnt(str, c) << '\n';
}
新版明解C++入門編 p.314 演習8-7
文字列 s に含まれる数字文字 '0', '1', … , '9' の個数をカウントして、各数字文字の個数を
c[0], c[1], … , c[9] に格納する関数 count_digits を作成せよ。
void count_digits(const char* s, int c[]);たとえば、文字列 s が "W140S500L88" であれば、c[0] に 3 を、c[1], c[4], c[5] に 1 を、c[8] に 2 を格納し、それ以外の要素には 0 を格納する。
【プログラムの仕様】
◆ スペース文字も含めた文字列を、キーボードから char str[21] に読み込む。
( cin.getline(str, 21) を利用 )
◆ 数字文字 '0', '1', … , '9' の探索は、
条件
*s >= '0' && *s <= '9'
を満たすかどうかで判断する。
◆ 数字文字 '0', '1', … , '9' から 実際の整数 0, 1, … , 9 への変換は、
例えば '7' の場合、
'7' - '0'
を計算して行います。
JISコード表によると、
'7' の文字コードは 0x37(10進数の55),'0' の文字コードは 0x30(10進数の48)なので、
'7' - '0' とすれば 55 - 48 の計算が行われて 整数 7 が得られます。
// p314_演習8-7
#include <iostream>
using namespace std;
void count_digits(const char* s, int c[])
{
for (int i = 0; i < 10; i++)
c[i] = 0;
while (*s) {
if (*s >= '0' && *s <= '9')
c[*s - '0']++;
*s++;
}
}
int main()
{
char str[21];
cout << "文字列を入力 : "; cin.getline(str, 21);
int c[10];
count_digits(str, c);
for (int i = 0; i < 10; i++)
cout << "c[" << i << "] = " << c[i] << '\n';
}
--
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6760860
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック