C++の文字列操作 その2


このエントリーをはてなブックマークに追加

昨日の続き。以下、すべて

#include <iostream>
using namespace std;

と書いてあるものとする。

文字列中の文字を一文字ずつ走査

string str = "abcde";
for(int i = 0; i < (int)str.size(); ++i){
    char ch = str[i];
}

部分文字列の生成

substr()を使う。第一引数で部分文字列の開始indexを、第二引数で部分文字列の長さを指定する。第二引数を省略した場合は、第一引数で指定した文字から末尾の文字までからなる部分文字列が返される。

    string str1 = "abcdef";
    cout << str1.substr(3, 2) << endl; // de
    cout << str1.substr(2) << endl;    // cdef

文字列に含まれる部分文字列の場所をすべて特定

例えば

    string str = "aa bb cc aa bb cc";
    string substr = "bb";

が与えられた時、文字列strに含まれる部分文字列substrの場所(この例だと0, 12)を羅列する方法。

    string str = "aa bb cc aa bb cc";
    string substr = "bb";
    
    string::size_type idx = str.find(substr);
    while(idx != string::npos){
        cout << "found index = " << idx << endl;
        idx = str.find(substr, idx + 1);
    }

とすればOK。findの第二引数で、検索の開始位置を指定できることを利用している。

文字列の挿入

string str = "abcde"に"zzz"を挿入して"abzzzcde"とする方法。

    string str = "abcde";
    str.insert(2, "zzz");
    cout << str << endl; // abzzzcde