この質問にはいくつかの例があります。しかし、ほとんどの答えは私が探しているものではありません。
ブーストやその他の非 STL ライブラリを使用するのではなく、効率的で簡単な機能を実装する方法を探しています。理由を私に尋ねると、ほとんどのコーディング コンテストやインタビューで、それらの使用が許可されていません。
これが私がアプローチできる最も近いものです:
vector<string> SplitString(const char *str, char c)
{
vector<string> result;
do {
const char *begin = str;
while(*str != c && *str) {
str++;
}
result.push_back(string(begin, str));
} while (0 != *str++);
return result;
}
int main() {
string mainString = "This is a sentence. Another sentence. The third sentence. This is the last sentence.";
vector<string> sentences;
sentences = SplitString(mainString.c_str(), '.');
while (!sentences.empty()) {
cout << sentences.back() << endl;
sentences.pop_back();
}
return 0;
}
これの問題は、文字列ではなく文字区切り文字しか持てないことです。いくつかの方法を実装することを考えましたが、あまりにも複雑に思えました。私が考えた最も簡単な方法は、区切り文字を char 配列に変換しc
て、この後に区切り文字 char 配列の最初の文字として使用することでした。
while(*str != c && *str) {
str++;
}
const char *beginDelim = *cArr;
while(1) {
if (*str == *cArr && *str && *cArr) {
str++;
cArr++;
}
else if (!*cArr) {
break;
}
else if (*cArr) {
cArr = beginDelim;
}
}
そして、コードはresult.push_back()
部分から続きます。
それで、文字列区切り記号で文字列を分割するための効率的で簡単な関数を実装する方法があるかどうか疑問に思っていましたか?