本专栏持续输出数据结构题目集,欢迎订阅。
题目
请编写程序,按字典序比较两个给定的字符串 s 和 t 的大小。
输入格式:
输入两个非空字符串 s 和 t,每个字符串占一行,不超过 1000 个字符,以回车结束(回车不算在字符串内)。
输出格式:
在一行中输出按字典序比较 s 和 t 的结果:如果 s>t 则输出 1;如果 s<t 则输出 -1;如果两者相等则输出 0。
输入样例 1:
abcd
abca
输出样例 1:
1
输入样例 2:
abcd
bcde
输出样例 2:
-1
输入样例 3:
abcd
abcd
输出样例 3:
0
代码
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 10011
int compareStrings(const char* s1, const char* s2) {
size_t len1 = strlen(s1);
size_t len2 = strlen(s2);
size_t minLength = len1 < len2 ? len1 : len2;
// 比较对应字符
for (size_t i = 0; i < minLength; ++i) {
if (s1[i] != s2[i]) {
return (int)s1[i] - (int)s2[i];
}
}
// 如果所有对应字符都相等,则比较长度
return (int)(len1 - len2);
}
int main() {
char s[MAX_LENGTH], t[MAX_LENGTH];
// 读取输入的两个字符串
if (fgets(s, MAX_LENGTH, stdin) == NULL) return 1;
if (fgets(t, MAX_LENGTH, stdin) == NULL) return 1;
// 移除字符串末尾的换行符
size_t len_s = strlen(s);
if (len_s > 0 && s[len_s - 1] == '\n') {
s[len_s - 1] = '\0';
}
size_t len_t = strlen(t);
if (len_t > 0 && t[len_t - 1] == '\n') {
t[len_t - 1] = '\0';
}
// 比较两个字符串
int result = compareStrings(s, t);
// 根据比较结果输出相应的值
if (result > 0) {
printf("1\n");
} else if (result < 0) {
printf("-1\n");
} else {
printf("0\n");
}
return 0;
}