关于这个问题有几个例子。然而,大多数答案都不是我想要的。
我正在寻找一种方法来实现高效且简单的功能,而不是使用 boost 或任何其他非 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;
}
现在的问题是,它只能有一个字符分隔符而不是字符串。我曾想过实施几种方法,但它们似乎太复杂了。我认为最简单的方法是,将分隔符转换为字符数组c
,用作分隔符字符数组的第一个字符:
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()
部分继续。
所以我想知道是否有任何方法可以实现一个高效且简单的函数来用字符串分隔符分割字符串?