【发布时间】:2015-01-16 03:33:48
【问题描述】:
所以我将字符串输入到数组mydata[10][81]
while ((ct<=10) && gets(mydata[ct]) != NULL && (mydata[ct++][0] != '\0'))
然后我使用 for 循环创建第二个指针数组
for (i=0;i<11;i++){
ptstr[i] = mydata[i];
}
这是我卡住的地方
我知道我需要以某种方式使用strlen,但我什至无法想象如何获取指针的长度,然后根据长度的第三个附加值重新分配该指针一个新位置
希望这是有道理的,我不知道如何去做或解释它,我只是想使用数组位置按长度对字符串进行排序(而不是使用像 qsort 这样的东西)
我做了更多的工作并想出了这个: 知道为什么它不起作用吗?
void orderLength(char *ptstr[], int num){
int temp;
char *tempptr;
int lengthArray[10];
int length = num;
int step, i, j, u;
for (i=0; i<num;i++){
lengthArray[i] = strlen(ptstr[i]);
}
for (step=0; step < length; step++){
for(j = step+1; j < step; j++){
if (lengthArray[j] < lengthArray[step]){
temp = lengthArray[j];
lengthArray[j] = lengthArray[step];
lengthArray[step] =temp;
tempptr=ptstr[j];
ptstr[j]=ptstr[step];
}
}
}
for (u=0; u<num; u++){
printf("%s \n", ptstr[u]);
}
}
【问题讨论】:
-
使用
qsort和基于strlen的自定义比较器。 -
您可能想了解
qsort库函数。或者阅读更多关于sorting algorithms的信息。 -
您打算如何进行排序?使用快速排序(然后按照其他评论的建议)或自己编写代码?而且那个while循环很糟糕——很容易通过读取太长的字符串和读取太多的字符串来破坏内存......而且你的for循环也会从ct数组的末尾开始! (假设您的意思是 mydata,而不是 mystrings)
-
提示:如果您只是对字符串进行排序,您可以调用
strcmp来比较内容。如果您按长度对它们进行排序,则改为比较长度(比较strlen返回的值) -
不要使用
gets()。
标签: c arrays string-length