【发布时间】:2015-08-01 13:18:49
【问题描述】:
下面是我的代码。如果我注释了 for 循环,它运行得非常好,但是当我添加 for 循环时,它会出现分段错误,甚至 for 循环之前的代码也没有显示任何输出。 如果 for 循环中有问题,那么它至少应该在循环开始之前显示一些输出。 同样在这里我使用 getline 因为我的字符串包含空格。 附言我的错误在循环中,我的 I 可能超过字符串长度,但它与循环开始之前的分段错误有什么关系,它至少应该打印长度。
#include<iostream>
#include<string>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
string s;
cin.ignore();
getline(cin,s,'\n');
int len=s.length();
cout<<len;
int curr_len=0;
int prev_len=0;;
int count=1;
int max=1;
for(int i=0;i<len;i++)
{
cout<<s[i];
while(s[i]!=' ')
{
curr_len=curr_len+1;
i=i+1;
}
if(curr_len==prev_len)
{
count=count+1;
if(count>max)
max=count;
}
else
{
count=1;
}
while(s[i]==' ')
{
i=i+1;
prev_len=curr_len;
curr_len=0;
}
}
cout<<s<<endl;
}
}
【问题讨论】:
-
"如果 for 循环有问题,那么它至少应该在循环开始之前显示一些输出。"实际上标准并没有要求,这是未定义行为的魔力(但在这种情况下,可能是因为 cout 缓冲区尚未刷新)
-
您真正想解决什么问题?在 C++ 中很少需要编写这样的循环——很可能一个算法或一组算法函数可以完成这项工作,从而导致代码少得多。其次,在循环内增加
i而不检查它是否超出了数组的范围。
标签: c++ string stl segmentation-fault getline