哪位懂C语言的高手帮我看个程序?

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:44:47
#include <stdio.h>
#include <string.h>
#define N 10
void main( )
{
char word[N][10];
int i,j,k;
int a[]={1,1,1,1,1,1,1,1,1,1};
printf("请输入一些字符串(以回车间隔,以'$$$'为结束标志):\n");
for(i=0;i<N;i++)
{
printf("请输入%d个字符串:",i+1);
gets(word[i]);
if(strcmp(word[i],"$$$")==0)goto loop;
}
loop:printf("\n");
for(i=0;;i++)
{
if(strcmp(word[i],"0")!=0)
{
for(j=i+1;;j++)
{
if(strcmp(word[i],word[j])==0)
{
a[i]++;
strcpy(word[j],"0");
}
if(strcmp(word[j],"$$$")==0)break;
}
}
if(strcmp(word[i],"$$$")==0)break;
}
for(i=0;;i++)
{
if(strcmp(word[i],"0")!=0)
{
printf("\t%s",word[i]

这个程序是输出一系列字符串,判断是否有相同字符串,把多余的相同字符串剔除,并算出共有几个。
if(strcmp(word[i],"$$$")==0break;
这句判断的语句应往前提,否则当i到数组最大维数时,j=i+1就越界了,造成错误
改为

#include <stdio.h>
#include <string.h>
#define N 10
void main( )
{
char word[N][10];
int i,j,k;
int a[]={1,1,1,1,1,1,1,1,1,1};
printf("请输入一些字符串(以回车间隔,以'$$$'为结束标志):\n");
for(i=0;i<N;i++)
{
printf("请输入%d个字符串:",i+1);
gets(word[i]);
if(strcmp(word[i],"$$$")==0)goto loop;
}
loop:printf("\n");
for(i=0;;i++){
if(strcmp(word[i],"$$$")==0){printf("i=%d \n", i);break; }
if(strcmp(word[i],"0")!=0){
for(j=i+1;;j++){
if(strcmp(word[i],word[j])==0){
a[i]++;
strcpy(word[j],"0");
}
if(strcmp(word[j],"$$$")==0){printf("j=%d \n", j);break; }
}
}