c++ 将字符向量解析为不同的字符串

exdqitrt  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(133)

我有一个字符向量

std::vector<char> input({'{', 'a', 'b','}',\0', '{','c','d','}',\0','\0','\0'});

我想把它解析成字符串

string1="ab"
string2="cd"

如何实现这一点,因为向量有尾随'\0'字符。
尝试类似下面的内容,但进入无限循环

td::vector<char> input({ 'a', 'b','\0', 'c','\0'});
std::vector<std::string> list;
std::string s(input.begin(), input.end());
size_t pos = 0;
std::string token;
while ((pos = s.find('\0')) != std::string::npos) {     
token = s.substr(0, pos);
s.erase(0, pos);
list.push_back(token);
}
oxf4rvwz

oxf4rvwz1#

不能100%肯定,但是我怀疑s.find('\0')应该返回第一个出现的\0,这意味着如果string(假设字符串)为abcd\0ef,则.find()应返回索引4。在这种情况下,从位置0擦除4个字符意味着擦除字符串的abcd部分,而\0仍然在那里。这很可能导致无限循环。
为了确保这一点,请在擦除之前打印pos值以检查它是什么索引。
此外,注意,由于.erase()O(n),其中n=string.size(),因此.substr()也是慢的,具有子串大小的时间复杂度。

相关问题