C++での文字列(string)の使い方についてまとめます

文字列(string)

宣言と初期化

#include<string>
using namespace std;

// 宣言
string c;

// 初期化をともなう宣言
string str( "abcdefghijk" );

文字列操作

サイズ

size()を使う。

str.size();

空の場合は、emptyで調べる。

if (str.empty());
連結

‘+’ を使う

// str1にstr2を連結
str1 += str2
比較

‘==’ を使う

// str1 と str2 を比較
str1 == str2
分割

substr( 取り出す初めの文字の番号 ) を使う

string str3( "abcdefghijk" );
str3.substr( 5 );    // "fghijk"
str3.substr( 5, 3 ); // "fgh"
文字の取り出し

str[取り出したい文字の番号] を使う

//strの1文字目取り出し
char c = str[1] ;
挿入

insertを使う。開始位置を指定する。

  //先頭に挿入
  string str( "abcdefghijk" );
  str.insert(0,"123"); // 123abcdefghijk

  //3文字目に挿入
  string str( "abcdefghijk" );
  str.insert(3,"123"); // abc123defghijk
削除

eraseを使う。

インデックスだけを指定した場合にはそこから最後の文字までが削除される。

str.erase( 3 );    // "abc"

指定した場所から指定した文字数を削除するには、erase(インデックス,文字数)で呼ぶ。

str.erase( 3, 3 );    // "abcghijk"

1文字を削除するためには、イテレータの先頭からの文字列を指定する。

str.erase(str.begin()+3);    // "abcefghijk"
検索

単純に for 文を回す方法

  bool rslt = 0;
  string str( "abcdefghijk" );
  char key = 'h';

  for (int i=0; i < str.size(); i++) {
    char target = str[i];
    if ( key == target ) {rslt = 1; break;}
  }

findを利用する。もし検索で求める文字があると、その文字位置を返す。

  string str( "abcdefghijk" );
  char key = 'h';
  cout << str.find(key) << endl; // 7

検索に失敗すると、string::npos という値が返される。(-1)

string str( "abcdefghijk" );
char key = 'z';

if( str.find(key) == string::npos ) {
  cout << "Not Found" << endl;
}

文字配列

文字列配列が与えられた時の、(i,j)要素へのアクセスは以下

str[i][j];

文字列配列が与えられた場合の表のサイズの求め方

vector<string> table 
= { "ABC",
    "DEF",
    "GHI",
    "JKL"}
int width  = table.size();
int height = table[0].length();

コピーは直接代入。与えられた配列をメソッド間で共有するときなどに利用する。

str1 = str2;