簡體   English   中英

在C中排序字符串數組

[英]Sorting string array in c

我在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)始終為false,因為根據for循環的定義, i始終小於planets_size-1 (換句話說,永遠不相等)。

代碼有兩個問題。 正如其他人指出的那樣,其中之一是main函數中的if(i==planets_size-1)永遠不會為真,因為在for循環中,您將不會超越planets_size-2

另一個問題是,由於string_compare函數返回0或1,因此if(comparison>1)永遠不會為真。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM