带你学c带你飞 22课最后一题有没有啥问题没?
#include <stdio.h>#define MAX 1024
int main ()
{
char str1;
char str2;
char *strget1 = str1;
char *strget2 = str2;
int ch , n;
printf("请输入第一串字符 ; ");
fgets(str1, MAX, stdin);
printf("请输入第二串字符 ; ");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符数 ; ");
scanf("%d",&n);
for(ch = 1; ch < n; ch++)
{
if(*strget1++ != *strget2++)
{
break;
}
}
if(ch >= n && *(strget1 + n) == *(strget2 + n))
{
printf("两个字符串的前 %d 个字符完全相同!",n);
}
else
{
printf("两个字符串不完全相同, 第 %d 个字符出现不同!\n",ch);
}
return 0;
} for(ch = 1; ch < n; ch++)
. . . . . .
if(* strget1 ++ != * strget2 ++) // 比较过程中,两个指针都在改变
. . . . . .
if(ch >= n && *(strget1 + n) == *(strget2 + n))// 这里却要求两个指针必须在字符串开头位置
这一句
if(* strget1 ++ != * strget2 ++)
改成下面这样就可以了
if(* (strget1 + ch) != * (strget2 + ch)) 本帖最后由 sunrise085 于 2020-11-20 11:03 编辑
楼上指出了你的程序的问题所在,但是好像没改对。
for循环后两个指针都向后移动了,循环结束后,指针前的字符都已经比较过了,只剩下当前指针剩下的字符没有比较了,所以应该这样修改
if(ch >= n && *(strget1 + n) == *(strget2 + n))
改为
if(ch >= n && *strget1 == *strget2) jackz007 发表于 2020-11-20 08:57
这一句
改成下面这样就可以了
一会上完课回去试试 感谢解答 sunrise085 发表于 2020-11-20 11:02
楼上指出了你的程序的问题所在,但是好像没改对。
for循环后两个指针都向后移动了,循环结束后,指针前的 ...
感谢解答 我是刚学指针概念有点不清楚 jackz007 发表于 2020-11-20 08:57
这一句
改成下面这样就可以了
题目是要求打印第一处不相同的位置 如果在n处找到 或者在n处没找到循环都会退出所以下面比较了第n处的字符 本帖最后由 jackz007 于 2020-11-20 15:23 编辑
sunrise085 发表于 2020-11-20 11:02
楼上指出了你的程序的问题所在,但是好像没改对。
for循环后两个指针都向后移动了,循环结束后,指针前的 ...
根本没必要那么比,如果前 n 个字符相等,ch 一定等于 n,如果不想等,ch 一定小于 n。所以,只要根据 ch 的值判断就足够了。所以,后面的字符比较纯属多余。 jackz007 发表于 2020-11-20 15:12
根本没必要那么比,如果前 n 个字符相等,ch 一定等于 n,如果不想等,ch 一定小于 n。所以, ...
比如 12345 和12346
我输入前5个
for(ch = 1; ch < n; ch++)
{
if(*strget1++ != *strget2++)
{
break;
}
此时循环退出 ch返回值为5
5 >= n
输出的是完全相同 鱼币 来鱼币啊
。。。。。 {:10_266:}{:10_266:}{:10_266:} 啊啊,舒服
页:
[1]