我需要用单个空格分割字符串并将其存储到字符串数组中。我可以使用fonction boost实现这一点:split,但我无法实现的是:
如果有多个空格,我想将空间整合到矢量
中例如: (下划线表示空格)
This_is_a_string. gets split into: A[0]=This A[1]=is A[2]=a A[3]=string.
This__is_a_string. gets split into: A[0]=This A[1] =_is A[2]=a A[4]=string.
我该如何实现?
由于
答案 0 :(得分:0)
为此,您可以使用find
和substr
函数的组合进行字符串解析。
假设到处都只有一个空格,那么代码就是:
while (str.find(" ") != string::npos)
{
string temp = str.substr(0,str.find(" "));
ans.push_back(temp);
str = str.substr(str.find(" ")+1);
}
您提出的其他请求表明我们在确定它没有查看前导空格后调用find
函数。为此,我们可以遍历前导空格来计算有多少,然后调用find
函数从上面搜索。要在find
位置之后使用x
函数(因为有x个前导空格),调用将为str.find(" ",x)
。
您还应该处理角落情况,例如整个字符串在任何时候由空格组成。在这种情况下,当前表单中的while
条件不会终止。也可以在那里添加x
参数。
答案 1 :(得分:0)
这绝不是最优雅的解决方案,但它将完成工作:
void bizarre_string_split(const std::string& input,
std::vector<std::string>& output)
{
std::size_t begin_break = 0;
std::size_t end_break = 0;
// count how many spaces we need to add onto the start of the next substring
std::size_t append = 0;
while (end_break != std::string::npos)
{
std::string temp;
end_break = input.find(' ', begin_break);
temp = input.substr(begin_break, end_break - begin_break);
// if the string is empty it is because end_break == begin_break
// this happens because the first char of the substring is whitespace
if (!temp.empty())
{
std::string temp2;
while (append)
{
temp2 += ' ';
--append;
}
temp2 += temp;
output.push_back(temp2);
}
else
{
++append;
}
begin_break = end_break + 1;
}
}