我正在创建一个收集最多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。
谢谢!
答案 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++)
这将循环十次。