gpt4 book ai didi

c - 对预定义的名称列表进行排序

转载 作者:行者123 更新时间:2023-11-30 16:44:31 25 4
gpt4 key购买 nike

我正在研究《绝对初学者 C 编程》第二版中的第 8 章挑战 3。该程序应该按字母顺序对名称数组进行排序。

我的程序无法运行。主要功能无sort()可以工作,但是排序功能搞砸了;还有strcmp()根据警告消息,似乎使用不正确。

我使用的编译器是 gcc,我用 nano 编写了代码。

/* Uses strcmp() in a different function
to sort a list of names in alphabetical order */

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

void sort(char*, int);

void main() {
char strStates[4][11] = { "Florida", "Oregon", "California", "Georgia" };
sort(*strStates, 4); // 4 is the number of string in the array

printf("\nFour States Listed in Alphabetical Order\n");

int x;
for(x = 0; x < 4; x++)
printf("\n%s", strStates[x]);
}

void sort(char* strNames, int iStrings) {
char strPlaceholder[11] = { 0 };
int x;
int y;

for(x = 0; x < iStrings; x++) {
for(y = 0; y < iStrings - 1; y++) {
if(strcmp(strNames[y], strNames[y + 1]) > 0) {
strcpy(strPlaceholder, strNames[y + 1]);
strcpy(strNames[y + 1], strNames[y]);
strcpy(strNames[y], strPlaceholder);
}
}
}
}

最佳答案

并不是作为答案,而是作为让您继续前进的提示。像 char[4][11] 这样的二维数组与像 char* 这样指向字符(序列)的指针不同。

假设有以下代码:

char *s = "Florida"; // lets pointer 's' point to a sequence of characters, i.e. { 'F', 'l', 'o', 'r', 'i', 'd', 'a', '\0' }
char arr[2][11] = { "Florida", "New York" };

那么像s[1]这样的表达式就相当于*(s + sizeof(char)),即*(s+1),而像 arr[1] 这样的表达式相当于 *(arr + sizeof(char[11])),即 *(arr + 11),而不是 *(arr + 1)。 “sizeof”部分由编译器完成,并从变量的类型派生。因此,char* 类型的参数的行为与 char[11] 类型的参数不同。

以下代码可能会帮助您转发:

void print (char array[][11], int n) {

for(int i=0;i<n;i++)
printf("%d:%s\n",i,array[i]);
}

int main() {

char strStates[4][11] = { "aer", "adf", "awer", "aert" };
print (strStates,4);

return 0;
}

关于c - 对预定义的名称列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44450291/

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