关于C语言中比较字符的问题
请问各位大佬,这个代码中实现的功能,如果两个字符串的长度完全相同,它是如何判断这两个字符串中的哪个字符不同的。#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
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;
} 像这句{ if (*target1 == '\0' && *target2 == '\0')},如果两个字符串长度相同,那么他们的结束符'\0'在同一个位置,那么不是直接输出“两个字符串完全一致的”吗? 本帖最后由 jackz007 于 2019-11-9 13:36 编辑
这个代码逻辑存在问题,
while (*target1 != '\0' && *target2 != '\0')
{
if (*target1++ != *target2++)
{
break;
. . . . . .
if (*target1 == '\0' && *target2 == '\0') printf("两个字符串完全一致!\n");
else printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index) ;
如果两个字符串长度相同,但是,最后一个字符不同也将被判定为 "两个字符串完全一致",原因出在指针字符比较,不论字符是否相同,两个指针都会增加,到字符串最后一个字符的时候,都会指向字符串结束标志 '\0',所以,会出现这个问题。
楼主的代码太过复杂,其实,是可以简单些的:
#include <stdio.h>
#include <string.h>
#define MAX 1024
int main()
{
char str1 , str2 , * target1 = str1 , * target2 = str2 ;
int index ;
bool f ;
printf("请输入第一个字符串:") ;
fgets(str1 , MAX , stdin) ;
str1 = '\0' ;
if (strlen(str1) > 0) {
printf("请输入第二个字符串:") ;
fgets(str2 , MAX , stdin) ;
str2 = '\0' ;
if (strlen(str2) > 0) {
if (strlen(str1) == strlen(str2)) {
for(f = true , index = 0 ; f ; index ++) if(* target1 ++ != * target2 ++) f = false ;
if(f) printf("两个字符串完全一致!\n") ;
else printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index) ;
} else {
printf("两个字符串长度不一致!\n") ;
}
}
}
return 0 ;
}
页:
[1]