|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Hermione 于 2017-12-11 22:11 编辑
这是我的错误代码:
- #include <iostream>
- #include <algorithm>
- #include <stdio.h>
- #include <string>
- #include <cstring>
- #define MAX 1024
- using namespace std;
- int main()
- {
- char v1[MAX];
- char v2[MAX];
- char *a = v1;
- char *b = v2;
- cout << "字符串1:";
- fgets(v1, MAX, stdin);
- cout << "字符串2:";
- fgets(v2, MAX, stdin);
- char ch;
- int index = 0;
- while(*a++ != '\0' && *b++ != '\0') //越过了第一个检查
- {
- if(*a != *b)
- break;
- index++;
- }
- if(*a == '\0' && *b == '\0')
- cout << "完全一致!";
- else
- cout << "不一样" << ' ' << index;
- }
复制代码
这是标准答案:
- #include <stdio.h>
- #define MAX 1024
- int main()
- {
- char str1[MAX];
- char str2[MAX];
- char *target1 = str1;
- char *target2 = str2;
- int index = 1;
- printf("请输入第一个字符串:");
- fgets(str1, MAX, stdin);
- printf("请输入第二个字符串:");
- fgets(str2, MAX, stdin);
- while (*target1 != '\0' && *target2 != '\0')
- {
- if (*target1++ != *target2++)
- {
- break;
- }
- index++;
- }
- if (*target1 == '\0' && *target2 == '\0')
- {
- printf("两个字符串完全一致!\n");
- }
- else
- {
- printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
- }
- return 0;
- }
复制代码
最本质的区别是,我的21行while里面*a++ *b++的位置不一样,我的很明显有一个问题,就是越过了第一个字符的检查。但是我的运行结果很奇怪,当我输入abc abc两个相同的三位字符时,显示一致,但是,当我输入abcd abcd两个四位字符时,居然显示不同,并且index = 5。
问题就是:为什么我会得出这样的运行结果?
谢谢大家的帮助。
因为你输入完一个字符串之后会用回车或者空格之类的结束,而fgets函数会将这个分隔符作为一个字符存到目标数组中,并在其之后加入'\0',这就是为什么你的index总是比实际输入的大1
从你的逻辑上来看,应该很难得到“完全一致”的输出结果,因为这个判断
if(*a == '\0' && *b == '\0')
cout << "完全一致!";
基本不太可能得到,当程序走到这里的时候,*a和*b已经不是指向'\0',而是它后面的那个字符
最后提醒:
将自增自减操作放在条件判断中是十分危险的事情!
|
|