c - 在c中对字符串数组进行排序

标签 c arrays pointers char

我有一个用 c 语言编写的行星名称字符串集合。我将它们存储在一个字符数组中。我想把它们整理出来。我知道 c 中有一个字符串比较方法,但我需要实现我的。在我的方法 (string_compare(char *planet1, char *planet2)) 中,我检查了两个行星之间的字符。如果 planet1 的字符在 plannet2 的字符之后,则返回 1,否则返回 0。然后我相应地重新排列数组项。目前,我的循环没有退出。它正在无限地运行。我也无法交换数组条目。请协助。

#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include <string.h>

//method declaration
int string_compare(char *planet1, char *planet2);

//main method
int main () {
    char *planets[9]= {"Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune", "Pluto"};
    bool sorted=false;

    int i=0, count = 0;
    do{
    int planets_size = (int)sizeof(planets)/sizeof(planets[0]);
    for(i=0; i< planets_size-1;i++){
        char *planet1_pointer = planets[i];
        char *planet2_pointer = planets[i+1];
        int comparison = string_compare(planet1_pointer,planet2_pointer);
        if(comparison>1){
                planets[i] = planet2_pointer;
                planets[i+1] = planet1_pointer;
                sorted = false;
                break;
            } else {
                if(i==planets_size-1){
                    sorted = true;
                }
            }
        }
        count++;
    } while (sorted==false);
    printf("The planets in alphabetical order are ");
    //printf("%s",planets);

    i=0;
    for (i=0; i<9; i++) {
        printf("%s " , planets[i]);
    }
    return 0;
}

int string_compare(char *planet1, char *planet2){
    int planet1_size = strlen(planet1);
    int planet2_size = strlen(planet2);
    int size=0;

    if(planet1_size<planet2_size){
        size = planet1_size;
    } else{
        size = planet2_size;
    }

    int i=0;
    for(i=0; i < size;i++){
        if((int)planet1[i]<(int)planet2[i]){
            return 0;
        } else if((int)planet1[i]>(int)planet2[i]){
            return 1;
        } else {
            continue;
        }
    }

return 0;
}

我的代码在上面。我是 c 的初学者。

最佳答案

您循环使用 for(i=0; i< planets_size-1;i++) .注意 i< planets_size-1 ,所以条件 if(i==planets_size-1)i 以来始终为假将始终小于 planets_size-1根据 for 循环的定义(换句话说,永远不相等)。

关于c - 在c中对字符串数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36666427/

相关文章:

c - C 中 x11 的链接问题

c - strcmp(字符串比较)到底在做什么?

c - 在c中使用数组打印图案

javascript - 在 React 中使用 map() 时无法通过 API 调用访问数组数据

c++ - 如何设计可反弹的大对象的类依赖?

c - 如何使用 C 头文件和 CUDA 代码编译 C 代码?

arrays - 使用字节 slice (或数组)时优化 go (golang) 代码的一些技巧是什么?

c++ - 从 vector 数组循环中获取数据供以后使用 C++

json - 为什么 json.Unmarshal 在 golang 中追加一个新指针后会更改指针值?

c - 如何将字符串复制到字符指针的中间