C语言 求输入的最多的一个单词

来源:百度知道 编辑:UC知道 时间:2024/05/21 14:23:56
题目要求的是 输入一个整数N 然后输入N个单词 当输入N=0的时候退出;
我使用的是结构体 其中一个元素name是单词,s是单词的数量;
只要输出出现最多的那个单词就可以了;
我调试不出来,以下是我的程序,请问有什么地方要修改的,达人来啊.
#include "stdio.h"
struct cl
{
char name[20];
int s;
};
main()
{
int n,i,max,j;
struct cl a[1000];
for(;;)
{
int t=0;
scanf("%d",&n);
if(n==0) break;
for(i=0;i<n;i++)
{
scanf("%s",a[i].name);
a[i].s=0;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(a[i].name==a[j].name) a[i].s++;
}
}
max=a[0].s;
for(i=0;i<n;i++)
{
if(a[i].s>max)
{
max=a[i].s;
t=i;
}
}
printf("%s\n",a[t].name);

你的怀疑是正确的。“==”并不能正确地比较两个字符串是否相等,应该用"string.h"库中定义的strcmp函数来比较两个字符串是否相等。

#include "stdio.h"
#include "string.h"
struct cl
{
char name[20];
int s;
};
main()
{
int n,i,max,j;
struct cl a[1000];
for(;;)
{
int t=0;
scanf("%d",&n);
if(n==0) break;
for(i=0;i<n;i++)
{
scanf("%s",a[i].name);
a[i].s=0;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(strcmp(a[i].name,a[j].name)==0) a[i].s++;
}
}
max=a[0].s;
for(i=0;i<n;i++)
{
if(a[i].s>max)
{
max=a[i].s;
t=i;
}
}
printf("%s\n",a[t].name);
}
}
已经调试通过!

我也觉得是,你把这句改为
if (strcmp(a[i].name,a[j].name)==0) a[i].s++;

就是if(a[i].name==a[j].name)这个错了。

应该用if( !strcmp(a[i].name,a[j].name) ) a[i].s++;

郭会