选择使用指针排序

时间:2016-02-15 00:17:08

标签: c sorting pointers

我有以下代码:

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

谢谢。

1 个答案:

答案 0 :(得分:0)

你有两件事是错的:

  1. p必须是char**而不是char*
  2. 在字符串之间进行比较需要一个循环:

    int t = 0;
    while (*(*(p + j)+t) &&  (*(*(p + j) + t) == *(*(p + min) + t)))
        t++;
    if (*(*(p + j) + t) < *(*(p + min) + t)) {
        min = j;
    }
    

    也许你想编写你的比较函数。