HEPtech     - 文字列型 std::string -
トップページ | Tips | Topics
<文字列型 std::string>

 C++において文字列を便利に扱えるstringについて説明します。

 C/C++には文字型としてcharがあり、しばしばその配列(文字配列)を用いて文字列を処理します。 しかし、文字配列での文字列の処理はあまり便利とは言えない場合も少なくありません。 そこでC++では文字列型std::stringが用意されています。 この文字列型では、例えば以下のように文字列を比較的容易に扱えます。

#include <string>

std::string moji;
moji="ABC";
moji+="def";
for ( int i=0;i<moji.length();i++ ){ moji[i]='x'; }

 その他にも色々便利なメンバー関数があります。

#include <string>

std::string s;
getline(std::cin, s) // 標準入力から1行読み込み代入
if ( s == "hoge"){;} // 文字列の比較も可能 (不等号は辞書順比較)
if ( s.empty() ){;} // 文字列が空であるかをチェック
int n=s.length(); // 文字列の長さを返す(s.size()と同じ)
std::string s2=s.substr(2,3); // 0から数えて2文字目から3文字を返す
char c[]=s.c_str(); // const char*型にして返す
s.erase(2,3); //  2文字目から3文字消して、後ろを詰める
s.replace(4,2,"test"); // 4文字目から2文字を"test"に置き換え
s.find("test"); // "test"を前から探して、"t"の位置を返す
s.rfind("test"); // "test"を後ろから探して、"t"の位置を返す

 比較的よく用いられるのはこれくらいでしょうか? 更なる詳細は書籍・WEB等で確認してください。 次に、連番ファイル名の処理時などにあると便利な、文字列における数字の取り扱いに触れておきます。 数字を文字列に組み込むには例えば以下のような方法があります。
(参考:http://cham.ne.jp/piro/cpp_sample.html#itos

#include <sstream>

std::string int2str(int n){
    std::stringstream ss;
    ss << n;
    return ss.str();
}
...
std::string s="path/sample_"+int2str(5)+".dat";

もっともこのような場合は、従来のchar*型とsprintfを用いて以下のようにする方が早くてラクかもしれません。

char* c;
sprintf(c,"path/sample_%d.dat",5);
2005-2017 HEPtech All rights reserved. Link/Unlink free.
inserted by FC2 system