【发布时间】:2017-10-28 15:02:07
【问题描述】:
#include <stdio.h>
#include <string.h>
void ascending_sort(char *name, char **pName, unsigned int size);
int main(){
char * names[] = {"Ellin","Alexa","Eliza","Celiza", NULL};
ascending_sort(names[0],names,( sizeof(names)/sizeof(char *)) - 1);
return 0;
}
void ascending_sort(char *name, char **pName, unsigned int size){
unsigned int i;
unsigned int z;
int keep;
char temp;
/// print out the array
for (i = 0; i < size; i++)
{
printf("str: %s\n", pName[i]);
}
///start sorting...
for (i = 0; i < size; i++){
keep = i;
for(z = i; z < size; z++){
if(pName[keep]>pName[z]){
keep = z;
}
}
temp = pName[i];
pName[i] = pName[keep];
pName[keep] = temp;
}
for (i = 0; i < size; i++){
printf("str: %s\n", pName[i]);
}
}
我对双指针(char**)感到困惑。 如何使用'for'循环打印出函数中数组的每个元素(以便我可以轻松理解)并对其进行排序(使用'for'循环)?
帮助修复我的排序算法,它不起作用
【问题讨论】:
-
你自己搜索过什么吗?
-
打印每个元素进行调试,你可以简单地做,例如
void ascending_sort (char **pName, int size) { int i; for (i = 0; i < size; i++) printf (" %s\n", pName[i]); }。 注意:您不需要传递char *name。实际上,由于您在names的末尾提供了 sentinel NULL,因此您甚至不需要传递size,例如void ascending_sort (char **pName) { while (*pName) printf (" %s\n", *pName++); }(注意:要保留指向pName开头的指针,请使用单独的指针来遍历名称) -
您需要使用 strcmp() 函数进行比较。请参阅下面的示例。
标签: c arrays string list sorting