C语言,求两个字符串的相同字符的个数,求大神帮忙看看这个程序哪里有问题

#include<stdio.h>
void main()
{
char a[2][100],*pa[2];
int i,j,n;
printf("输入两个字符串\n");
for(i=0;i<2;i++)
{
scanf("%s\n",a[i]);
}
pa[0]=a[0];
pa[1]=a[1];
printf("%s%s",a[0],a[1]);
for(i=0;*(pa[0]+i)!='\0';i++)
{
for(j=0;*(pa[1]+j)!='\0';j++)
{
if(*(pa[0]+i)==*(pa[1]+j))
n+=1;
}
}
printf("相同的字符数为%d",n);
}

#include<stdio.h>
void main()
{
    char a[2][100],*pa[2];
    int i,j,n=0; //初始化
    printf("输入两个字符串\n");
    for(i=0;i<2;i++)
    {
        //scanf("%s",a[i]);
        gets(a[i]); //最好用gets
    }
    pa[0]=a[0];
    pa[1]=a[1];
    printf("%s->%s\n",a[0],a[1]);
    for(i=0;*(pa[0]+i)!='\0';i++)
    {
        for(j=0;*(pa[1]+j)!='\0';j++)
        {
            if(*(pa[0]+i)==*(pa[1]+j))
                n+=1;
        }
    }
    printf("相同的字符数为%d",n);
}

追问

为什么gets比较好

追答

gets 可以过滤 换行符

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-05-27
#include<stdio.h>
int main()
{
char a[2][100],*pa[2];
int i,j,n;
printf("输入两个字符串\n");
//getchar();
for(i=0;i<2;i++)
{
scanf("%s",a[i]);
getchar();
}
pa[0]=a[0];
pa[1]=a[1];
printf("%s%s",a[0],a[1]);
for(i=0;*(pa[0]+i)!='\0';i++)
{
for(j=0;*(pa[1]+j)!='\0';j++)
{
if(*(pa[0]+i)==*(pa[1]+j))
n+=1;
}
}
printf("相同的字符数为%d",n);
}
就是你输入的时候你加了换行,scanf是遇到空格或换行就当输入结束的,要换行的话加getchar吸收换行符就可以了
相似回答