解题思路:
首先,录入的时候,是用空格分开来的,所以用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分
7 人评分
#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; }
C语言训练-邮票组合问题* (C语言代码)......浏览:648 |
弟弟的作业 (C++代码)浏览:1299 |
C语言训练-自由落体问题 (C语言代码)浏览:1736 |
C语言训练-求素数问题 (C语言代码)浏览:721 |
C语言训练-素数问题 (C语言代码)浏览:994 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:599 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:578 |
妹子杀手的故事 (C语言代码)浏览:1218 |
C语言训练-求1+2!+3!+...+N!的和 (C语言代码)万恶的long long浏览:877 |
C语言程序设计教程(第三版)课后习题11.8 (C语言代码)浏览:871 |