为什么 for 循环总是在 else 语句处停止
Why does the for loop keep stopping at else statement?
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
main()
{
string str1;
char strArray[80];
cout << "Enter string: ";
getline(cin, str1);
transform(str1.begin(), str1.end(), str1.begin(), ::tolower);
for(int i = 0;i < str1.length();i++)
{
if(str1[i] == ' ' || str1[i] == ',' || str1[i] == '.')
{
}
else
{
strArray[i] = str1[i];
}
}
cout << strArray;
return 0;
}
for 循环在找到空格、逗号或句点后会停止。有人可以向我解释为什么会发生这种情况吗?
问题是即使您从输入中删除了一个字符,i
也会不断递增。它实际上并没有停止,只是跳过一个角色。由于strArray
现在有一个洞,所以这个洞很可能被0
填满,从而结束了 C 弦。附言不能保证这种行为,在程序的另一次运行时,您最终可能会得到完全不同的结果。
当你调用 erase 时,它会影响容器,所以你需要处理这个问题。 erase() 将迭代器返回到已删除元素之后的下一个元素,因此您应该改用它:
int i = 0;
for(string::iterator it = str1.begin(); it != str1.end(); )
{
if(*it == ' ' || *it == ',' || *it == '.')
{
it = str1.erase(it);
}
else
{
strArray[i++] = *it++;
}
}
strArray[i] = ' '; // terminate string
你能发布你为 str1 输入的字符串吗?因为我尝试运行它,它运行良好,没有停止。我在你的代码中找到的唯一属性是你擦除循环中的字符,这将导致错误的结果字符串。
您正在从字符串中删除字符,同时仍继续递增计数器。从for
循环中删除++i
。将其放在else
条款下。
for(int i = 0;i < str1.length();)
{
if(str1[i] == ' ' || str1[i] == ',' || str1[i] == '.')
{
str1.erase(i, 1);
}
else
{
strArray[i] = str1[i];
++i;
}
}
strArray[str1.length()] = ' ';
相关文章:
- 我的简单if-else语句是如何无法访问的代码
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- 我似乎对if/else的基本语句有问题:/
- 如果 else 语句不断循环
- C++ If/Else 语句被跳过
- 如果条件不相关,我应该更喜欢两个 if 语句而不是 if-else 语句吗?
- 如何将 if else 语句重写为 switch 语句
- 在 C++ 中的 if-else if- else 语句期间更改变量
- 为什么我的 if else 语句不起作用并从数组中输出正确的索引?
- 我的 If Else 语句无法在向量 (C++) 中提供最大值
- 如果 else 语句使用大写和小写字母
- 为什么无论输入如何,所有 if-else 语句都会打印?
- 多个'if'语句,不带'else'
- 嵌套的 else 语句 c++
- 为什么切换 if else 语句的顺序会导致错误?
- 如何使用 if else 语句
- if/else 语句输出由于加号或减号而未显示正确的消息
- if-else 语句仅按特定顺序工作,我不知道为什么
- "if else"被视为单个语句吗?
- 试图避免在 for 循环中出现 if-else 语句,但代码似乎有一些错误