【发布时间】:2020-04-06 10:12:17
【问题描述】:
我正在尝试按升序对字符串数组进行排序
Abcdefg
Ultimate
UMN
Bawaw
我希望结果应该是:
Abcdefg
Bawaw
Ultimate
UMN
我发现冒泡排序是对字符串进行排序:
Abcdefg
Bawaw
UMN
Ultimate
当我尝试绕过它时,将所有内容都转换为大写/小写字符串,但如果我添加数据,它就会变得杂乱无章
#include<stdio.h>
#include<string.h>
int main(int argc, char **argv){
char data[8][50] = {"Abcdefg","Ultimate","UMN", "Bawaw", "Ultima Sonora", "UMN Medical Centre", "Ultima Toys","BACD"};
char temp[10];
int i, j;
printf("Original data = \n");
for(i=0; i<8; i++){
printf("%s\n", data[i]);
}
printf("\n");
for(i = 0; i < 8; i++){
for(j = 0; j < 50; j++){
if(data[i][j] >= 65 && data[i][j] <= 90){
data[i][j] += 32;
}
}
}
for(i = 0; i <8 ; i++){
for(j = i+1; j < 8; j++)
if(strcmp(data[i], data[j])>0){
strcpy(temp, data[i]);
strcpy(data[i],data[j]);
strcpy(data[j], temp);
}
}
printf("Sorted data = \n");
for(i=0; i<8; i++){
printf("%s\n", data[i]);
}
return 0;
}
有人知道那里发生了什么吗?
【问题讨论】:
-
旁白:请使用
tolower()以在ctype.h中找到。您甚至不需要先测试范围。data[i][j] = tolower(data[i][j]); -
你有字符串溢出。在第一次测试中,
char temp[10];可以持有"Ultimate",但现在太短了,无法持有"UMN Medical Centre"。我建议char temp[50];匹配二维数组的字符串。 -
您可能想检查您的库是否支持
strcmpi- 不区分大小写等同于strcmp。 - 这比将整个字符串转换为大写或小写更有效。 -
@WeatherVane 感谢您的回答!对此,我真的非常感激。你的意思是范围是数组中的字符数吗?
-
“范围”是指字符值。您可以安全地将
'2'传递给tolower,它会返回相同的值——而不是一些奇怪的小写尝试。
标签: c bubble-sort