下面是我的代码。如果我对for循环进行注释,但是当我添加for循环时它运行得非常好,它会给出一个分段错误,甚至在for循环之前的代码也没有显示任何输出。 如果for循环中有错误,那么它应该至少在循环开始之前显示一些输出。 在这里我使用getline因为我的字符串包含空格。 附:我的错误在循环中,我可能不仅仅是字符串长度,但是在循环开始之前它与分段错误有什么关系,它应该至少打印长度。
#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;
}
}
答案 0 :(得分:2)
while(s[i]!=' ')
{
curr_len=curr_len+1;
i=i+1;
}
我认为这是你的问题。 想想当s [i]是行的结尾时会发生什么。
答案 1 :(得分:1)
问题在于你没有测试嵌套i
循环中while
越界:
例如:
while (s[i] != ' ')
应该是:
while (s[i] != ' ' && i < len)
假设i
几乎位于输入字符串的末尾,并且输入字符串中没有空格字符,从i
指向的位置开始。这个while
循环将继续运行,直到找到空格字符。这可能是超过字符串长度的数百个,甚至数千个字节。
将此更改应用于此while循环以及您未进行此检查的所有其他更改后,程序应该运行(结果是否正确是一个不同的故事)。