【发布时间】:2013-07-12 15:25:56
【问题描述】:
有几个关于这个问题的例子。然而,大多数答案都不是我想要的。
我正在寻找一种方法来实现高效且简单的功能,而不是使用 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()部分继续。
所以我想知道是否有任何方法可以实现一个高效且简单的函数来使用字符串分隔符分割字符串?
【问题讨论】:
-
所以你想要一个字符串作为分隔符?
-
抱歉,问题有点不清楚,修改了最后一句。
-
是的,有很多方法。到目前为止,您尝试过什么?
-
为什么不直接使用 string::find()?您也在谈论效率,但您正在将子字符串复制到字符串向量 - 为什么不包含原始字符串和索引向量的结构?
标签: c++ string split delimiter