冒泡对字符串进行排序,但排序不正确

问题描述 投票:0回答:1

我正在尝试将字符串数组按升序排序

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;
}

有人知道那里发生了什么吗?

c bubble-sort
1个回答
0
投票

首先请注意,char temp的空间不足以容纳您的某些字符串,因此请使用char temp[50]。同样,由于l的ASCII码小于m,因此结果为true。

您应该在这里查看strcmp的工作方式how strcmp() works

© www.soinside.com 2019 - 2024. All rights reserved.