gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:23 25 4
gpt4 key购买 nike

我有一个用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com