C++ 標準ライブラリのstring クラス(型)を使用すると、より直感的に文字列を処理・操作することができます。string クラスを使用するためにはstring をインクルードします。
文字列を格納するための変数はstring 型として宣言します。たとえば、color という名前の文字列は
string color;
のように宣言します。このとき、格納できる文字の数を指定する必要はありません。
宣言と同時にリテラルを代入することにより文字列を初期化することができます。たとえば、初期値として“black” という文字列を格納する場合は
string color = "black";
のように代入演算により文字列リテラルを代入します。string 型の変数は通常の変数と同様、宣言時以外でも何度でも代入演算を行うことができます。
string 型の文字列は、cin、cout を用いて簡単に入力・出力を行うことができます。cin は空白・タブ・改行区切りで文字列を変数に読み込みます。 たとえば、次のプログラムは文字列の入出力を行うプログラムです。このプログラムは整数n、n 個の文字列を順番に入力し、それらに番号を付けて出力します。
#include<iostream> #include<string> using namespace std; int main(){ int n; string color = "black"; color = "while"; // 上書き cout << "0: " << color << endl; cin >> n; for ( int i = 1; i <= n; i++ ){ // n 個の文字列を読み込み番号を付けて出力 cin >> color; cout << i << ": " << color << endl; } return 0; }
たとえば、上のプログラムに
5 red bule yello pink green
のような(空白や空行が混ざった)データを入力すると、以下のように出力されます。
0: white 1: red 2: blue 3: yellow 4: pink 5: green
string 型には文字列の操作を行うための基本的な演算子が定義されています。string 型の文字列の各要素(文字)へは配列と同様に[ ] でアクセスすることができます。文字列の長さは関数size()で取得することができます。これは、string クラスの関数で. (ドット) 演算子で呼び出します。 たとえば、次のプログラムは、文字列の基本操作を行います。
#include<iostream> #include<string> using namespace std; int main(){ string greeting = "Hello"; for ( int i = 0; i < greeting.size(); i++ ){ cout << greeting[i]; greeting[i] = toupper(greeting[i]); // i 文字目を大文字に変換する } cout << "\n"; cout << greeting << endl; return 0; }
出力は以下のようになります。
Hello HELLO
アスキーコードにおいて、数字は連続したコードが割り当てられているので、文字である数字を整数に変換したい場合は '0' という文字を対象となる文字から引きます。以下にいくつか、例をあげます:
int a = '0' - '0'; // a は 0 int b = '1' - '0'; // b は 1 int c = '2' - '0'; // c は 2
例えば、文字列 number の文字 i を整数に変換する場合は以下のように記述します:
int num; num = number[i] - '0';
オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。 |