我一直试图解决这个问题一段时间;
我编写的程序应该要求用户输入一个句子,每个字母都存储在每个销售的数组中。这是菜单的样子:
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;
}
}
答案 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数组。