この節では、テキスト行を個々の語句に分割するような関数を定義することによって、いくつかの string 関数の使用方法を説明します。この関数は、9.3.3 節の用語索引プログラム例でも使用しました。
注: この分割関数は、concord.cpp ファイルの用語索引プログラム内にあります。
この関数は 3 つの引数を使用します。最初の 2 つは string で、それぞれテキスト行と語句を区切るセパレータを表します。3 番目の引数は string の list で、行の個々の語句を返すために使用されます。
void split (string & text, string & separators, list<string> & words) { int n = text.length(); int start, stop; start = text.find_first_not_of(separators); while ((start >= 0) && (start < n)) { stop = text.find_first_of(separators, start); if ((stop < 0) || (stop > n)) stop = n; words.push_back(text.substr(start, stop - start)); start = text.find_first_not_of(separators, stop+1); } }
プログラムはまず、セパレータではない最初の文字を検索します。次にループがセパレータである次の文字を検索します。この値が見つからない場合は文字列の終わりを使用します。この 2 つの値の差が、ひとつの語句です。部分文字列操作を使用してテキストからコピーされ、語句の list に挿入されます。次に、次の語句の開始が検索され、ループが続行されます。インデックス値が string の範囲を越えると、実行停止します。