C语言 第19课字符串处理 模仿strncmp函数实现功能
#include <stdio.h>#include <string.h>
int main()
{
char str1;
char str2;
int i = 0;///读取数组中的字符
unsigned int n;///接受比较的字符数
printf("请输入第一个字符串:");
while((str1 = getchar()) != '\n');
printf("请输入第二个字符串:");
i = 0;
while((str2 = getchar()) != '\n');
printf("请输入比较的字符数:");
scanf("%u", &n);
for(i = 0; i < n; i++)
{
if(str1 - str2)
{
i++; ///这里为什么要i++?我自己没写这个,所以错了,输不出来正确的答案!
break;
}
}
printf("比较的结果是:%d\n", str1 - str2);
return 0;
} 这个应该和最后的输出语句有关
printf("比较的结果是:%d\n", str1 - str2);
你想为啥这句要用一个str1 - str2而不是用str1 - str2?
原因在于如果两个字符串是一样的,说明for语句中的i是的等于n的
for(i = 0; i < n; i++)
{
if(str1 - str2) //只要str1 - str2差不为0都为真
{
i++;
break;
}
}
举个具体例子,比如str1 = “abcdf”, str2="abcdz",比较前4个字符
如果最后的输出不用str1 - str2,那结果就是 str1 - str2 即 'f' - 'z',
这个样的话结果就会出错,正确的输出应该是 0 ,但实际输出是 -20
所以必须有个i++,因为要照顾到 str1 - str2 #include <stdio.h>
int cmpnstr(char s1[] , char s2[] , int n)
{
int i , r ;
for(r = i = 0 ; i < n && s && s2 && s1 == s2 ; i ++) ;
if(i < n) r = s1 - s2 ; // 如果 i == n 说明 s1、s2 前 n 个字符完全相同 r = 0,i < n 则说明不相同,首个不同的字符的索引为 i
return r ;
}
int main(void)
{
char str1 , str2 , c ;
int i , n ;
printf("请输入第一个字符串:") ;
for(i = 0 , str1 = '\0' ; (c = getchar()) != '\n' ; i ++ , str1 = '\0') str1 = c ;
printf("请输入第二个字符串:") ;
for(i = 0 , str2 = '\0' ; (c = getchar()) != '\n' ; i ++ , str2 = '\0') str2 = c ;
printf("请输入比较的字符数:") ;
scanf("%d" , & n) ;
if(n > 0) printf("比较的结果是:%d\n", cmpnstr(str1 , str2 , n)) ;
} printf("比较的结果是:%d\n", str1 - str2);//去掉i++,改成这样试试,不明白输出str1 - str2有什么意义,谁能解释一下
页:
[1]