插入空格以分解C ++字符串中的字符集

时间:2011-10-05 15:27:24

标签: c++ string break

我正在尝试编写一个函数,它将在字符串中找到任何偶数字符子集,并通过在字符串中插入空格来将它们分成两半。例如,给定字符串“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;
}

3 个答案:

答案 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;
}