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