开发一个 C 程序来执行以下操作:
- 创建两个包含 25 个元素的一维字符数组,分别命名为 first 和 secondary。
- 要求用户输入两个字符串并将它们存储在数组 first 和 secondary 中。
- 将两个数组传递给名为 countChars 的函数,该函数计算并打印每个字符串中的字符数。
- 将两个数组传递给另一个名为 order 的函数,该函数确定并返回一个结果,该结果显示按字母顺序哪个字符串在另一个字符串之前。当主函数收到返回结果时,它会打印一条消息来显示它们的顺序。例如,如果第一个字符串是“green”,第二个字符串是“white”,则该函数确定绿色按字母顺序排列在白色之前。 main 函数打印一条语句: “按照字母顺序,\green\在\white\之前”。
代码:
#include<stdio.h>
#include<string.h>
int main() {
char first[25], second[25];
int length1, length2;
printf("Enter the first and the second string: ");
scanf("%s %s", first, second);
length1 = strlen(first);
length2 = strlen(second);
order(first, second);
return 0;
}
int order(char *first, char *second) {
int i;
for (i = 0; first[i] && second[i] && first[i] == second[i]; i++)
if (first[i] && second[i]) {
return 1;
} else
return 0;
}
最佳答案
order()
的目标与 strcmp()
的功能匹配.
这是 order()
的快速解决方案是
int order(char *first, char *second) {
return strcmp(first, second);
}
<小时/>
但也许目标是 re-invent the wheel .
如@David C. Rankin评论过,运行字符串寻找差异。
然后使用常见的 C 习惯用法 (a > b) - (a < b)
用于比较。这可以避免所有溢出问题 - 即使当类型为 char
时不太可能出现溢出问题。 .
// return 0 on match
// return 1: first > second
// return -1: first < second
int order(char *first, char *second) {
while (*first && *second && *first == *second) {
first++;
second++;
}
return (*first > *second) - (*first < *second);
}
<小时/>
一些改进:
使用
const
允许使用const char *
调用函数以及char *
论据。无需测试
*first
和*second
.首先测试更有可能的不匹配,效率稍高。
自由使用
()
可能有助于清楚地理解代码。比较为
unsigned char
。str...()
函数将字符评估为unsigned char
,即使char
已签名。当对带有负数的字符串进行排序时,这会产生影响,而 OP 的数据不太可能出现这种情况。
.
int order_alt(const char *first, const char *second) {
while ((*first == *second) && *first) {
first++;
second++;
}
return ((unsigned char)*first > (unsigned char)*second) -
((unsigned char)*first < (unsigned char)*second);
}
关于c - 字符串按字母顺序排列的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53894676/