我想问的是,在下面的方法排序程序中(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();
}