字符串匹配问题

xxt_99 2014-10-24 09:56:45
需要达到的效果是:
输入一个数字,表示进行匹配的字符串数量,然后输入相应数量的字符串。输出有多少对相同的数组。
例如:
输入
3
aaa
bbb
aaa

输出
1

现代码如下:
#include<stdio.h>
#include<string.h>
main()
{
int n,t,k,j,s=0;
char a[100][8];
scanf("%d",&n);
for(t=0;t<n;t++)
{
gets(a[t]);
}
for(k=0;k<n;k++)
{
for(j=k+1;j<n;j++)
{if(strcmp(a[k],a[j]==0)) s++;}
}
printf("%d\n",s);
}


程序能通过,但运行时结果不对。请问各位大神,我这是哪里出错了?
...全文
95 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxt_99 2014-10-25
  • 打赏
  • 举报
回复
嗯好的,我去试试看
brookmill 2014-10-25
  • 打赏
  • 举报
回复
还是回车的问题,改的不彻底呀。把getchar()从循环里拿出来,不用每次都做,但是要紧跟着scanf后面做一次。 scanf("%d",&n); getchar(); for(t=0;t<n;t++) { gets(a[t]); } 我觉得没有其它问题了。如果结果还是不对,自己调试一下,看看读入的结果对不对: scanf("%d",&n); getchar(); for(t=0;t<n;t++) { gets(a[t]); printf("%s\n", a[t]); // 加上这一行看看,确认读取正确。 }
xxt_99 2014-10-25
  • 打赏
  • 举报
回复
现在在用手机没法以代码框形式展现出来啦。
每次输入字符不会超过上限。例如
输入
3
aaa
bbb
aaa
输出本应当是1,运行结果却为0
修改了你上面提到的那两点。即
#include<stdio.h>

#include<string.h>

main()

{

int n,t,k,j,s=0;

char a[100][8];

scanf("%d",&n);

for(t=0;t<n;t++)

{

gets(a[t]);

getchar();

}

for(k=0;k<n;k++)

{

for(j=k+1;j<n;j++)

{if(strcmp(a[k],a[j])==0) s++;}

}

printf("%d\n",s);

}
brookmill 2014-10-25
  • 打赏
  • 举报
回复
引用 3 楼 xxt_99 的回复:
我太笨啦。发这个贴之前我已经修改了这两处错误,但还是运行结果错误我才来询问的,不小心复制了错误代码过来~那请问更改了这两点以后还有什么错误呀?新手真的看不出来了π_π
1. 修改之后的代码麻烦你贴出来 2. 运行结果什么错误 3. 这个代码只能处理最长为7的字符串,你的输入没有更长的吧,输入了什么?
xxt_99 2014-10-25
  • 打赏
  • 举报
回复
我太笨啦。发这个贴之前我已经修改了这两处错误,但还是运行结果错误我才来询问的,不小心复制了错误代码过来~那请问更改了这两点以后还有什么错误呀?新手真的看不出来了π_π
xxt_99 2014-10-25
  • 打赏
  • 举报
回复
引用 6 楼 brookmill 的回复:
还是回车的问题,改的不彻底呀。把getchar()从循环里拿出来,不用每次都做,但是要紧跟着scanf后面做一次。 scanf("%d",&n); getchar(); for(t=0;t<n;t++) { gets(a[t]); } 我觉得没有其它问题了。如果结果还是不对,自己调试一下,看看读入的结果对不对: scanf("%d",&n); getchar(); for(t=0;t<n;t++) { gets(a[t]); printf("%s\n", a[t]); // 加上这一行看看,确认读取正确。 }
改成这样就对了~谢谢大家。想知道为什么不用每一次循环都做一次getchar();,是因为gets();不会把回车读进去么?
自信男孩 2014-10-25
  • 打赏
  • 举报
回复
引用 1 楼 brookmill 的回复:
{if(strcmp(a[k],a[j]==0)) s++; 括号错了 {if(strcmp(a[k],a[j])==0) s++;
+++ 输入的字符个数不要超过6个,记着还有一个字符'\n'也会进入字符串里,因为你用的是gets();函数。
brookmill 2014-10-24
  • 打赏
  • 举报
回复
还有一个问题,第一次运行gets的时候,可能会把输入n的时候敲的回车读进去。如果你发现运行的时候少读了一行,那就是这个原因了,用getchar()之类的把那个回车先读出来就好了
brookmill 2014-10-24
  • 打赏
  • 举报
回复
{if(strcmp(a[k],a[j]==0)) s++; 括号错了 {if(strcmp(a[k],a[j])==0) s++;

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧