题目:
实现比较两个字符串的大小(函数strcmp()的功能)。
例如:
输入:abcd和abcd 输出:0
输入:abcd和bbcd 输出:-1
输入:cbcd和abcd 输出:2
解题思路:
关键就是模拟关于strcmp函数的比较逻辑和返回值。
假设有字符串a和字符串b两个字符串进行比较:
首先会进行比较二者的第一个字符,如果第一个字符相同,那么就继续比较下一个字符,如果第一个字符不相同,就返回一个非零的整形数据(ASCII码差值)。(如果a中字符大于b中字符,则返回一个正数,反之返回一个负数)
依次比较,直到比较到字符串的结尾,如果每一个字符都相等,则返回0;
程序代码:
#include <stdio.h>
int cmp_fun(char *,char *);
int main(int argc, char *argv[])
{
char a[50], b[50];
int ret;
puts("请输入字符串a:");
gets(a);
puts("请输入字符串b:");
gets(b);
ret = cmp_fun(a,b);
printf("比较的结果为(正数:a>b,负数:a<b,0:a=b):%d\n",ret);
return 0;
}
int cmp_fun(char *p, char *q)
{
while((*p != '\0') && (*p == *q)){
p++;
q++;
} //直到字符串a结束或者两个字符串出现不相等的字符时退出循环
return *p - *q;
//当因为字符串a结束导致循环结束时,如果字符串b也正好结束,那么a=b
//否则二者一定不相等,需要做减法判断大小关系
}
运行结果:
相等:
请输入字符串a:
hello
请输入字符串b:
hello
比较的结果为(正数:a>b,负数:a<b,0:a=b):0
a>b:
请输入字符串a:
abcdef
请输入字符串b:
abcde
比较的结果为(正数:a>b,负数:a<b,0:a=b):102
a<b:
请输入字符串a:
hello
请输入字符串b:
hello123
比较的结果为(正数:a>b,负数:a<b,0:a=b):-49