在c ++中拆分偶数字符串

时间:2015-02-18 00:33:19

标签: c++ string split

我对c ++很新。我试图拆分包含偶数子字符串的字符串,直到没有偶数编号的子字符串。例如,如果我输入AB ABCD ABC,则输出应为A B A B C D ABC。我试图没有令牌,因为我不知道如何... 到目前为止,我只分割了第一个偶数子字符串,如果我只有1个子字符串,它就不起作用。有人可以帮帮我吗? 任何建议将不胜感激。谢谢!

string temp = "";    
void check(string &str, int &i, int &flag)
{
    int count = 0;
    int reminder;
    do
        {
            count++;
            temp += str[i];
            i++;        
        } while (str[i] != ' ');

    i = i - temp.size();

    reminder = count % 2;
    if (reminder == 0)
        flag = 1;
    else
        flag = 0;
}

void SplitEvenWord(string &str)
{
    int i = 0;
    int flag = 0;

    for (i = 0; i < str.size(); i++)
    {
        check(str, i, flag);
        if (flag == 1)
        {
            temp.insert(temp.size() / 2, " ");
            str.replace(i, temp.size() - 1, temp);
        }
    }

}

2 个答案:

答案 0 :(得分:2)

有两种技能在软件工程中绝对至关重要(嗯,超过两种,但现在只有两种):孤立地开发新功能,并以最简单的方式测试事物。 < / p>

如果只有一个子字符串,则表示代码失败。你没有说 它失败了(我应该在列表中提到明确的错误报告)所以我不知道是否用一个应该拆分的偶数长度字符串来测试你的代码( “ABCD”=&gt;“ABCD”)或它应该单独留下的奇数长度的字符串(“ABC”=&gt;“ABC”)。在我尝试编写这些代码之前,我先看看你的第一个函数:

void check(string &str, int &i, int &flag)
{
  ...
  do
    {
        count++;
        temp += str[i];
        i++;
    } while (str[i] != ' ');
  ...
}

麻烦了。我记住的字符串不包含任何空格,因此循环不能终止。这段代码将超出字符串的末尾,进入该内存空间中的任何内容,这将导致未定义的行为。(如果您不知道该术语,则意味着无法说明什么会发生,但如果你很幸运,程序就会崩溃。)

修复此问题,尝试在“ABC”和“ABCD”,“A”,“”和“ABC DEF”上运行该代码,并使其完美运行。完成后,看看你的其他功能。不要使用随机输入进行测试,使用短,明确定义的字符串进行测试。一旦完美运行,请尝试更长,更复杂的字符串。如果您发现导致其失败的字符串,请抓住它!那个字符串会引导你犯一个错误。

这应该足以让你开始。

答案 1 :(得分:0)

我写这个作为答案,因为它太长而不适合作为评论。

我有一些建议可以帮助您找出问题所在。

  1. 分开&#34;检查&#34;进入至少两个函数,一个用于将字符串拆分为单个单词并检查它们,另一个用于检查字符串的长度。
  2. 测试&#34;检查&#34;和#34;标记化&#34;分别运作,看看他们是否给你预期的答案。单独处理它们直到它们是正确的。
  3. 将答案的格式分开出来&#34; SplitEvenWord&#34;分成一个单独的功能。
  4. &#34; SplitEvenWord&#34;那么应该只是调用你在上面的步骤中创建的函数。
  5. 当我被困住时,我总是试图将问题分解成小块的小块,我知道我可以开始工作。最终,问题变成将已经工作的解决方案组合成一个解决原始问题的更大功能。