我有以下代码:
void sortStrings(char strings[5][32])
{
int i = 0, j = 0, wall = 0;
int min = i;
for (int i = wall; i < 5; i++){
min = i;
for (j = wall; j < 5; j++){
if (strcmp(strings[j], strings[min]) < 0){
min = j;
}
}
swapStrings(strings[min], strings[wall]);
wall++;
}
}
这段代码的作用是按字母顺序对2d字符串数组进行排序,我测试了它并且它正常工作,现在我的问题是如何实现这段代码而不使用数组操作(又称使用指针和指针操作) 。
这就是我到目前为止所遇到的情况,当我尝试运行它时会崩溃,所以我做错了什么?
{
int i = 0, j = 0, wall = 0;
char *p = strings;
int min;
for (i = wall; i < 5; i++){
min = i;
for (j = wall; j < 5; j++){
if (*(p + j) < *(p + min)){
min = j;
}
}
swapStrings(*(p + j),*(p + wall));
wall++;
}
}
这是我用作参考的swapStrings方法:
void swapStrings(char string1[], char string2[])
{
char temp[32];
strcpy(temp, string1);
strcpy(string1, string2);
strcpy(string2, temp);
}
预期的输出是:如果我输入5个字符串,可以说它们是:
hello
goodbye
how
are
you
它应该返回:
are
goodbye
hello
how
you
谢谢。
答案 0 :(得分:0)
你有两件事是错的:
p
必须是char**
而不是char*
在字符串之间进行比较需要一个循环:
int t = 0;
while (*(*(p + j)+t) && (*(*(p + j) + t) == *(*(p + min) + t)))
t++;
if (*(*(p + j) + t) < *(*(p + min) + t)) {
min = j;
}
也许你想编写你的比较函数。