我制作这个问题是因为我将分词器从strtok_r移动到了C++的等效版本。我必须使用strtok_r代替strtok,因为大多数情况下我需要执行两个嵌套的分词。
strtok_r算法大致如下:
char *end_token, *token, *word ;
// fill 'word'
token = strtok_r (word, " ", &end_token) ;
while (token != NULL) {
// do something
token = strtok_r (NULL, " ", &end_token) ;
}
以下是 C++ 版本(摘自这里的另一篇帖子):
string mystring, token ;
size_t next_token ;
// fill 'mystring'
while (token != mystring) {
next_token = mystring.find_first_of (" ") ;
token = mystring.substr (0, next_token) ;
mystring = mystring.substr (next_token + 1) ;
// do something
}
现在的问题是:为什么C++版本相对于C版本如此沉重? 对于长字符串,C++版本需要等待约10秒钟,而使用相同字符串的C版本瞬间完成。 因此,C++版本似乎具有更高的复杂性... 你对此有什么想法?
strtok
会修改输入的字符串,而 C++ 版本则是在创建副本。尽管它们可能产生相同的结果,但这两个版本采取了完全不同的方式来达到最终结果。 - Chad