string クラスによる文字列

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';

Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。