解题思路:
首先,录入的时候,是用空格分开来的,所以用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; }
1011题解浏览:819 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:645 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:1483 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:476 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:692 |
小O的乘积 (C++代码)浏览:796 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:1361 |
1073题解浏览:652 |
半数集问题 (C语言代码)浏览:969 |
C语言程序设计教程(第三版)课后习题6.4 (C语言代码)浏览:479 |