我正在尝试编写一个函数,它将在字符串中找到任何偶数字符子集,并通过在字符串中插入空格来将它们分成两半。例如,给定字符串“AA BBB CCDD”,我的字符串应转换为“A A BBB CC DD”。
我的breakString()函数似乎不起作用,我不知道为什么。有人可以帮忙吗?
void breakString(string &str1)
{
int pos1 = -1;
int pos2 = str1.find_first_of(" ", pos1+1);
while (pos2 != -1)
{
if(((pos2-pos1)-1)%2 == 0)
{
str1.insert((pos2-pos1)/2, 1, ' ');
return;
}
else
{
pos1 = pos2;
pos2 = str1.find_first_of(' ', pos1+1);
}
}
if((str1.size() - pos1)%2 == 1)
str1.insert((str1.length()-pos1)/2, 1, ' ');
return;
}
答案 0 :(得分:1)
你说它不起作用,但你没有说怎么做。我可以立即看到两个
问题:首先,当你找到第一个时,你会立刻回来
长度均匀的单词,所以你显然不会破坏任何跟随
话;第二个是如果你想继续,insert
将改变其后任何位置的值。
(FWIW:我可能先将整个字符串分解为单词,
将它们放在std::vector<std::string>
中,然后迭代它,
在需要的地方插入额外的空间,然后重新组装它们。它的
可能比你使用的方法慢一点,但它很多
更清洁,更容易理解。)
答案 1 :(得分:0)
你的while循环中有一个返回值,因此在第一次插入后,它将退出该函数。
答案 2 :(得分:0)
void breakString(string &str1){
string::size_type pos1 = 0;
string::size_type pos2 = str1.find_first_of(" ");
while (pos2 != string::npos){
if((pos2 - pos1) % 2 == 0){
str1.insert(pos1 + (pos2-pos1)/2, 1, ' ');
pos2 += 1;
}
pos1 = str1.find_first_not_of(" ", pos2);
pos2 = str1.find_first_of(" ", pos1);
}
if((str1.size() - pos1) % 2 == 0)
str1.insert(pos1 + (str1.size() - pos1)/2, 1, ' ');
return;
}