首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用字符串进行气泡排序,但排序不太好

用字符串进行气泡排序,但排序不太好
EN

Stack Overflow用户
提问于 2020-04-06 10:12:17
回答 2查看 142关注 0票数 1

我试图按升序排列一个字符串数组

代码语言:javascript
复制
Abcdefg
Ultimate
UMN 
Bawaw

我希望结果应该是:

代码语言:javascript
复制
Abcdefg
Bawaw
Ultimate
UMN

我发现气泡排序是对字符串进行排序,例如:

代码语言:javascript
复制
Abcdefg
Bawaw
UMN
Ultimate

当我试图绕过它时,我把所有东西都转换成大写/小写字符串,但是如果我添加数据,它就变得杂乱无章。

代码语言:javascript
复制
#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;
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-06 10:27:51

首先请注意,temp没有足够的空间容纳一些字符串,所以使用char temp[50]。另外,由于l的ASCII代码小于m,所以您要排除的结果是真的,您的程序也是如此,但是由于有溢出,程序将有未定义的行为。这意味着任何事情都可能发生。

阅读这个链接How dangerous is it to access an array out of bounds?,在这里看也不错,how strcmp() works

票数 3
EN

Stack Overflow用户

发布于 2020-04-06 10:37:58

我在代码中看到的另一件事是大写/小写字符串的部分。

代码语言:javascript
复制
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;
            }
        }
    }

您应该使用j < strlen(data[i]。您还可以使用tolower函数作为上面的注释。

它变成:

代码语言:javascript
复制
for(i = 0; i < 8; i++){
        for(j = 0; j < strlen(data[i]); j++){
            data[i][j] = tolower(data[i][j]);
        }
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61057414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档