解题思路:
首先,录入的时候,是用空格分开来的,所以用scanf进行录入,这样就变成
了用空格分隔的字符数组了所以,下一步应该把这两个字符数组的末尾加上'\0',使
其变成字符串
在判断字符串大小之前,我们要先知道如何判断字符串的大小
首先比较两个串的第一个字符,若不相等,则直接比较这两个串的第一个字符的ASCII码
大小,若相等,则比较下一个字符,若还相等,则继续比较下一个字符,知道出现不等的
字符或者其中一个字符串遇到结束符'\0'为止。
例如:he 和 hello
1、h和h相同,比较下一个
2、e和e相同,比较下一个
3、'\0'和l比较,l更大
所以,是第二个字符串更大,返回-1
判断字符串的大小,我们可以用一个函数来实现
int fun(char* a, char* b) {
while (*a != '\0' && *b != '\0')
{
if (*a > * b)
return 1;
if (*a < *b)
return -1;
a++;
b++;
}
if (*a == '\0' && *b != '\0')return -1;
if (*a != '\0' && *b == '\0')return 1;
return 0;
}这两个指针a和b一开始都是指向他们对应的字符串的第一个元素,
通过循环来进行判断,只要这两个指针其中一个指向了'\0'就跳出循环
如果循环途中遇到了a指向的值更大,那就返回1反之返回-1
如果循环结算了,说明a或b其中一个指向了'\0',当然,也可能两个都指向了'\0'
如果其中一个指向了'\0',且另一个字符串没有指向'\0',那说明另一个字符串就大于前一个
所以可以通过这样的代码来实现:
if (*a == '\0' && *b != '\0')return -1; if (*a != '\0' && *b == '\0')return 1;
如果这两个条件都没有执行的说,说明就是这两个都指向了'\0',所以,直接一个return 0;就可以了
参考代码:
#include <stdio.h>
#include <string.h>
int fun(char* a, char* b) {
while (*a != '\0' && *b != '\0')
{
if (*a > * b)
return 1;
if (*a < *b)
return -1;
a++;
b++;
}
if (*a == '\0' && *b != '\0')return -1;
if (*a != '\0' && *b == '\0')return 1;
return 0;
}
int main()
{
char a[1000];
char b[1000];
scanf("%s%s", a, b);
a[strlen(a)] = '\0';
b[strlen(b)] = '\0';
printf("%d", fun(a, b));
}0.0分
5 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
#include<stdio.h> int myStrcmp(char *a1,char *a2) ; int myStrcmp(char *a1,char *a2) { int i = 0; while (a1[i] != '\0' && a2[i] != '\0') { if (a1[i] > a2[i]) return 1; else if (a1[i] < a2[i]) return -1; i++; } if(a1[i]>a2[i]) { return 1; } else if(a1[i]<a2[i]) { return -1; } else { return 0; } } int main() { int n; char a1[100]; char a2[100]; scanf("%s",&a1); scanf("%s",&a2); n=myStrcmp(a1,a2) ; printf("%d\n",n); return 0; }a[strlen(a)] = '\0'; b[strlen(b)] = '\0'; 这两行什么意思啊