#include<bits/stdc++.h> using namespace std; int main() { int m,n,s; cin>>m>>n>>s; char a[m][30],b[m][30]; int t=0; for(int i=1;i<=m;i++) { cin>>a[i]; } int p=1,y=0; for(int i=1;i<=m;i++) { if(i%n==0) p=1; p++; if(p==s) { y++; strcpy(b[t++],a[i]); for(int k=0;k<t;k++) { if(strcmp(a[i],b[k])==0) { strcpy(b[k],a[i+1]); } } } } if(y==0) { cout<<"Keep going..."<<endl; } else { for(int i=0;i<t;i++) { cout<<b[i]<<endl; } } return 0; }改错
时间: 2024-02-14 11:08:13 浏览: 26
这段代码存在一些问题,主要是数组下标越界和字符串处理函数的使用问题。下面是修改后的代码:
```c++
#include<bits/stdc++.h>
using namespace std;
int main() {
int m,n,s;
cin>>m>>n>>s;
string a[m],b[m];
int t=0;
for(int i=0;i<m;i++) // 数组下标从0开始
{
cin>>a[i];
}
int p=s-1,y=0; // p初始值应为s-1
for(int i=p;i<m;i+=n) // i每次加n
{
bool flag=true;
for(int k=0;k<t;k++)
{
if(a[i]==b[k]) // 字符串比较应使用==,而不是strcmp函数
{
flag=false;
break;
}
}
if(flag) // 如果不重复,则加入输出数组b中
{
b[t++]=a[i];
}
else // 如果重复,则将p加1
{
p++;
}
}
if(t==0) // 输出判断应该是t==0
{
cout<<"Keep going..."<<endl;
}
else
{
for(int i=0;i<t;i++)
{
cout<<b[i]<<endl;
}
}
return 0;
}
```