[英]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.