S1E22作业比较字符串
#include <stdio.h>#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 1, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\0' && *target2 != '\0')
{
ch = *target1;
if (ch < 0)
{
if (*target1++ != *target2++ || *target1++ != *target2++)
{
break;
}
}
if (*target1++ != *target2++)
{
break;
}
index++;
n--;
}
if ((n == 0) || (*target1 == '\0' && *target2 == '\0'))
{
printf("两个字符串的前 %d 个字符完全相同!\n", index);
}
else
{
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
return 0;
} 第一个中文是相同的,为什么会说第一个中文不相同呢 你比较的是下一个字符,所以跳出的时候下标应该也要往前进一位
#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 1, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\0' && *target2 != '\0')
{
ch = *target1;
if (ch < 0)
{
if (*target1++ != *target2++ || *target1++ != *target2++)
{
break;
}
}
if (*target1++ != *target2++) // 你这是比较了下一个字符,所以index要加一
{
index++;
break;
}
index++;
n--;
}
if ((n == 0) || (*target1 == '\0' && *target2 == '\0'))
{
printf("两个字符串的前 %d 个字符完全相同!\n", index);
}
else
{
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
return 0;
} {:10_282:}为什么我复制楼主的程序运行出来是正确的 大马强 发表于 2022-1-7 09:24
你比较的是下一个字符,所以跳出的时候下标应该也要往前进一位
为什么中文是正确的数字和字母不行。。 又改了一遍,因为scanf输入的中止符是 \n,所以niwhiel的判断要改一改
#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 0, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\n' && *target2 != '\n')// scanf的字符串中止符是 \n
{
ch = *target1;
if (ch < 0)
{
if (*target1++ != *target2++ || *target1++ != *target2++)
{
break;
}
}
if (*target1++ != *target2++) // 你这是比较了下一个字符,所以index要加一
{
index++;
break;
}
index++;
n--;
}
if ((n == 0) || (*target1 == '\n' && *target2 == '\n'))
{
printf("两个字符串的前 %d 个字符完全相同!\n", index);
}
else
{
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
return 0;
} 阿萨德按时 发表于 2022-1-7 09:33
为什么中文是正确的数字和字母不行。。
因为他是1开始,把index = 0 就好了 大马强 发表于 2022-1-7 09:43
又改了一遍,因为scanf输入的中止符是 \n,所以niwhiel的判断要改一改
这次是英文可以中文不行了。。。。 好奇怪呀,中文可以,英文又不可以了
阿萨德按时 发表于 2022-1-7 09:53
这次是英文可以中文不行了。。。。
这个应该可以了
但是我还没解决不等长问题,比如 edd e 比较3个
#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 0, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\n' && *target2 != '\n')// fgets的字符串中止符是 \n
{
ch = *target1;
if (ch < 0) //判断是否位中文
{
if (*target1++ != *target2++ || *target1++ != *target2++)
{
index++;
break;
}
}
else if (*target1++ != *target2++) // 你这是比较了下一个字符,所以index要加一
{
index++;
break;
}
index++;
n--;
}
if ((n == 0) || (*target1 == '\n' && *target2 == '\n'))
{
printf("两个字符串的前 %d 个字符完全相同!\n", index);
}
else
{
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
return 0;
} 哭了 xieyuwen 发表于 2022-1-7 11:09
哭了
解决了{:10_297:}
#include <stdio.h>
#define MAX 1024
int main()
{
char str1;
char str2;
char *target1 = str1;
char *target2 = str2;
char ch;
int index = 0, n;
printf("请输入第一个字符串:");
fgets(str1, MAX, stdin);
printf("请输入第二个字符串:");
fgets(str2, MAX, stdin);
printf("请输入需要对比的字符个数:");
scanf("%d", &n);
while (n && *target1 != '\n' && *target2 != '\n')// fgets的字符串中止符是 \n
{
ch = *target1;
if (ch < 0) //判断是否位中文
{
if (*target1++ != *target2++ || *target1++ != *target2++)
{
index++;
break;
}
}
else if (*target1++ != *target2++) // 你这是比较了下一个字符,所以index要加一
{
index++;
break;
}
index++;
n--;
}
if (n == 0)
{
printf("两个字符串的前 %d 个字符完全相同!\n", index);
}
else
{
if (*target1 != *target2 && (*target1 == '\n' || *target2 == '\n')) // 说明 两者不相等,并且其中一个长于另一个
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index+1);
else
printf("两个字符串不完全相同,第 %d 个字符出现不同!\n", index);
}
return 0;
} 谢谢老铁了
页:
[1]