如何通过指针对多于一位的数字进行排序?

时间:2014-04-15 13:29:58

标签: c sorting pointers

我想问的是,在下面的方法排序程序中(void sortArrayPointers(char * p []))仅适用于1位数字。 (例如,如果我输入6,1,3,2作为输入,则按预期排序为1,2,3,6。)但是当我给出2位数或更多数字时,它只根据第一个数字进行排序而不是&#39关心其他位。我确实理解这一点,因为我的指针指向第一个字符,所以它只计算第一个字符。我希望程序也可以对多个数字进行排序。这里缺少什么?如何制作指针以考虑所有位?

注意:已解决:在sort函数中使用此表达式而不是post:if(strcmp(p [j],p [j + 1])> 0)。

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

    void sortArrayPointers(char *p[]);
    int getUserInput();
    void printContent(char *p[], int  counter);

    char *myDynamicArray[25];
    char buffer[80];
    int i = 0;
    int j = 0;
    int k = 0;
    int count = 0;
    int countSort;

    void sortArrayPointers(char *p[]){

    char *temp;
    i = 0;

    for (i = 0; i < countSort; i++)
    {
        for (j = 0; j < countSort - 1; j++)
        {
            if (*p[j]>*p[j + 1])
            {
                temp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = temp;
            }

        }
    }

 }

    //Input
    int getUserInput(){

    int count;

    puts("Enter integers, press enter to end");

    while ((i < 25) && (fgets(buffer, 80, stdin) != 0) && (buffer[0] != '\n'))  //fgets adds a \n at the end

    {
        //allocate pointers space according to buffer
        if ((myDynamicArray[i] = (char *)malloc(strlen(buffer) + 1)) == NULL)
            return -1;
        //copy buffer to allocated space
        strcpy(myDynamicArray[i++], buffer);

    }

    //print the contents
    count = i;

    return count;

    }

    //prints the contents of the pointer to character array
    void printContent(char *p[], int  counter){

    int k = 0;

    for (k = 0; k < counter; k++)
    {
        printf("%s\n", p[k]);
    }

    }
    //main method
    int main(void){

    int i = 0;
    int k = 0;
    int count = 0;

    count = getUserInput(myDynamicArray);
    countSort = count;
    puts("Before sort:\n");
    printContent(myDynamicArray, count);

    sortArrayPointers(myDynamicArray);
    puts("After sort:\n");
    printContent(myDynamicArray, count);

    getchar();

}

0 个答案:

没有答案