在Codeforce 1167a上获取运行时错误 http://codeforces.com/problemset/problem/1167/A
字符串输入问题
int n;
int temp=0;
cin>>n;
//n++;
while(n--)
{
int nn;
cin>>nn;
//cout<<n<<endl;
if(nn<11)
{
cout<<"NO"<<endl;
continue;
}
char* str = new char[nn+1];
cin>>str;
for(int i=0;i<=(nn-11)+1;++i)
{
if(str[i]=='8')
{
cout<<"YES"<<endl;
temp=8;
delete[] str;
break;
}
}
if(temp!=8)
{
cout<<"NO"<<endl;
}
temp=0;
}
输入
15 11 88888888888 100 8888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888 100 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 100 1111111111111111111111111111811111111111111111111111111111111111111111111111111111111111111111111111111 100 1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111181111111111111 100 111111111111111111111111111111111111111111111111111111111 ...
输出
是 是 没有 是 是 是 是 是 否
运行时错误
答案 0 :(得分:0)
您正在混淆。
您可以通过两种方式来处理此问题,但是您要完成一半的工作,另一半的工作。
您可以使用动态分配
char* str = new char[nn+1];
...
delete[] str;
或者您可以使用可变长度数组(VLA)。
char str[nn+1];
...
您的代码使用VLA,但随后尝试delete
就像使用动态分配一样。
在两种使用动态分配的方法中,即使某些编译器接受VLA也不是合法的C ++。
更好的C ++解决方案是使用std::string
。然后分配将为您处理。