重複の可能性:
C++で文字列を分割する
関数の動作を模倣する関数を作成しようとしてgetline()
いますが、区切り文字を使用して文字列をトークンに分割するオプションがあります。この関数は、2つの文字列(2つ目は参照によって渡されます)とchar
区切り文字のタイプを受け入れます。最初の文字列の各文字をループし、それを2番目の文字列にコピーし、区切り文字に到達するとループを停止します。true
最初の文字列の区切り文字の後の文字数が多い場合などに返されますfalse
。最後の文字の位置は静的変数に保存されています。何らかの理由で、プログラムは無限ループに入り、何も実行していません。
const int LINE_SIZE = 160;
bool strSplit(string sFirst, string & sLast, char cDelim) {
static int iCount = 0;
for(int i = iCount; i < LINE_SIZE; i++) {
if(sFirst[i] != cDelim)
sLast[i-iCount] = sFirst[i];
else {
iCount = i+1;
return true;
}
}
return false;
}
この関数は次のように使用されます。
while(strSplit(sLine, sToken, '|')) {
cout << sToken << endl;
}
なぜそれは無限ループに入り、なぜそれは機能しないのですか?istringstream
可能であれば、を使用せずに解決策に興味があることを追加する必要があります。