0
複数の行を含む文字列からトークンとしてデータを読み取ろうとしています。 私はコードstrtokは改行をどのように扱いますか?
char * pch;
pch = strtok ((char*)MyStr.c_str()," ,|,\n"); int i = 0;
while (pch != NULL && i++ < 10)
{
cerr << i << ':' << pch << ' ';
pch = strtok (NULL, " ,.-");
}
入力が
std::string SP1271 = "1271,1\n"
"0,44248,8,45040,20,1,0,100\n"
"545,590,603,564,566,598,569,585,586,578\n";
で、出力は
1:1271 2:1
0 3:44248 4:8 5:45040 6:20 7:1 8:0 9:100
545 10:590
あるを使用し、セパレータとして '\ n' を使用することは合法ですか?
:
なぜC++の機能を使わないのでしょうか? – kabanus
定数 'c_str()'の返り値に 'strtok'を使うのは良い考えではありません(強制非constキャスト、汚れたハック!!)。 _real_ C++では、区切り文字に基づいてテキストを分割する実際の方法を検討する必要があります。 –
はい、セパレータとして '\ n'を使用することは合法です。それは他のどのようなキャラクターでもあります。ただし、最初の 'strtok'呼び出しでは' \ n'をセパレータとして渡しますが、後続呼び出しでは渡しません。だから、 '' 1 \ n0 ''は単一のトークンとして終わるのです。なぜなら、 '\ n'は何とか特別なものではなく、それをトークンのセパレータとして扱うからです。 –