从char数组中删除条目

时间:2014-03-02 21:17:22

标签: c++ arrays algorithm loops for-loop

我正在创建一个收集最多10个字符的char数组的程序。然后它要求用户输入一个字符。如果找到该字符,它将删除该字符数组中的所有条目,并向前移动数组中的其余字符以消除所有间隙。

这是我目前的代码:

for (int n = 0; n == 10; n++)
{
    int index(0);
    **while (text[index] != EOT)
    {
        if (text[index] == letter)
        {
            while (text[index] != EOT)
            {
                text[index] = text[index + 1];
                index++;
            }
        }
        else
            index++;
    }**
}

粗体代码(或者*之间的**当前正在工作,并删除用户输入的字符的第一个实例。所以我决定在整个while循环中放置一个for循环,使其重复代码10次。因此,由于输入限制为10个字符,它将(或应该)起作用吗?

然而它不再做任何事了。它甚至不会删除角色的第一个实例,这真让我感到困惑。谁能看到我错在哪里?

这是c ++,顺便说一句,我正在使用Visual Studios 2013。

谢谢!

5 个答案:

答案 0 :(得分:3)

循环的控制语句

for (int n = 0; n == 10; n++)

表示循环将永远不会执行。你将零分配给n然后说:“当n等于10时执行循环”。但是n回答:“我不等于10”。:)

您可以使用标准算法std::remove

更简单地执行任务

例如

#include <algorithm>
#include <cstring>
//...

*std::remove( text, text + std::strlen( text ), letter ) = '\0';

答案 1 :(得分:0)

你应该使用std :: vector,这对你来说更容易。

for(std::vector<char>::iterator it = vect.begin() ; it != vect.end() ; it++)
{
    if((*it) == letter)
    {
        vect.erase(it);
    }
}

答案 2 :(得分:0)

您的问题是因为您使用相同的index变量在两个不同的地方循环

for (int n = 0; n == 10; n++)
{
    int index(0);
    **while (text[index] != EOT)   // loop 1
    {
        if (text[index] == letter)  // loop 1
        {
            while (text[index] != EOT)  // loop 2
            {
                text[index] = text[index + 1];  // loop 2
                index++;               // loop2
            }
        }
        else
            index++;  // loop 1
    }**
}

将您的代码更改为

for (int n = 0; n == 10; n++)
{
    int index(0);
    while (text[index] != EOT)
    {
        if (text[index] == letter)
        {
            int index2(index);
            while (text[index2] != EOT)
            {
                text[index2] = text[index2 + 1];
                index2++;
            }
        }
        else
            index++;
    }
}

答案 3 :(得分:0)

我建议采用以下解决方案:

std::string text;
char charToBeRemoved;

text.erase (std::remove(text.begin(), text.end(), charToBeRemoved), text.end());

答案 4 :(得分:0)

当你进行循环时,检查你的变量是错误的。

for (int n = 0; n == 10; n++)

应该是

for (int n = 0; n < 10; n++)

这将循环十次。