从数组中删除字符

时间:2015-02-19 17:26:03

标签: c++ arrays

我一直试图解决这个问题一段时间;

我编写的程序应该要求用户输入一个句子,每个字母都存储在每个销售的数组中。这是菜单的样子:

void displayMenu() {
    cout << "\n\n\n           ________MENU________\n";
    cout << "\n STOP                                    0";
    cout << "\n Input text                              1";
    cout << "\n Output text                             2";
    cout << "\n Length of text                          3";
    cout << "\n Put text in uppercase                   4 - (Works)";
    cout << "\n Count duplicates of given letter        5 - (Works)";
    cout << "\n Remove all occurrences of given letter  6 - Sort of Works?";
}

如您所见,选项6要求用户输入一个字符,然后它应该删除该数组中所有出现的字母。

完整代码: https://gist.github.com/anonymous/33c380881f145e9383fc

在完成此任务方面,是否有人能够指出我正确的方向?有什么我想念的吗?我只是无法理解它。

所以说例如数组是H, e, l, l, o,我想删除l,然后输出应为H, e, o

我已经完成了选项5,我认为选项6应该与它相似吗?

我有点聚集,我可能会做一些“循环”#39;或者&#39; while loop&#39;但我不确定如何从数组中删除该值。

编辑: 这是我到目前为止所做的,但它不起作用:

void removeAllOccurrences(char text[], char letter)
{
    int index(0);
    while (text[index] != EOT)
    {
        if ((text[index] == letter) || (text[index] == toupper(letter)))
        {
            text[index] = text[index + 1];
        }
        ++index;
    }
}

2 个答案:

答案 0 :(得分:1)

你应该真的使用std::string

如果您坚持使用数组,至少使用std::array,那么您可以'删除'这样的元素:

std::array<char, 5> text {'h', 'e', 'l', 'l', 'o'};
std::fill(std::remove(std::begin(text), std::end(text), 'l'), std::end(text), '\0');

请注意,这不会改变数组的大小。

答案 1 :(得分:0)

我觉得最简单的方法是迭代char数组,并将每个char添加到一个新的char数组,除了用户输入的数组。

这将为您留下一个没有选定字符的新char数组。