【发布时间】:2020-04-16 05:14:46
【问题描述】:
我是 C 编程新手,我正在尝试编写一个按字母顺序对单词进行排序的代码。我认为大写字母和小写字母不同。我的排序规则是首先考虑字母顺序,然后大写字母优先,字符较少的单词优先。对于所有单词,我们只考虑第一个和第二个字母字符,如果它们相似,我们转到下一个单词。
最后,当输入0 时,程序应该完成了。
以下是它应该做什么的示例:
输入:alireza Mohammad Arash anahita sarah Milad john Alireza Maryam 0
输出:Alireza alireza anahita Arash john Maryan Milad Mohammad sarah
#include<stdio.h>
#include<string.h>
int main() {
int i=0, j=0, count;
char str[25][25], temp[25];
while (1) {
gets(str[i]);
if(str[i][0]=='0')
break;
i++;
j++;
}
count=i;
for(i=0; i<=count; i++)
for(j=i+1; j<=count; j++) {
if(strcmp(str[i], str[j]) > 0) {
strcpy(temp, str[i]);
strcpy(str[i], str[j]);
strcpy(str[j], temp);
}
}
for(i=0; i<count; i++)
printf("%s ", str[i]);
return 0;
}
但我的代码仅通过比较它们的 ASCII 码对单词进行排序,这导致所有大写字母都排在第一位
输入:aa bb AA we WE 0
我的输出:AA WE aa bb we
但应该是:
输出:AA aa bb WE we
我在想我是否可以做一些事情,比如为字符创建新的 ASCII 代码,但这似乎也是不可能的。
这样的字符串怎么排序?
【问题讨论】:
-
BTW:你想要的函数是
strcasecmp() -
不要使用
gets。曾经。 stackoverflow.com/questions/1694036/… -
strcpy(temp, str[i]); strcpy(str[i], str[j]); strcpy(str[j], temp);这是对字符串进行排序的不好方法。你只需要对它们的指针进行排序以避免复制它们的内容
标签: c string sorting c-strings alphabetical