尝试对字符串数组进行排序。字符串本身和数组中的字符串。代码似乎可以很好地对字符串本身进行排序,但在调用 sortList 函数后,我只得到垃圾字符。第一次摆弄指针和 C。
int main()
{
char *list[LEN];
int i, n;
char input[SIZE+2];
printf("How many strings will you enter");
scanf("%d", &n );
getchar();
//start reading strings
if(n<=LEN)
{
for(i = 0; i< n;i++)
{
printf("Enter string %d: ",i+1);
fgets(input, SIZE +2, stdin);
input[strcspn(input,"\n")] = '\0';
list[i] = strdup(input);
}
}
for(i = 0; i < n;i++)
printf("item %d is %s\n", i+1 ,list[i]);
for(i = 0; i<n;i++)
{
sortChars(list[i]);
printf("item %d is %s\n",i+1, list[i]);
}
sortList(list, n);
for(i = 0; i < n;i++)
free(list[i]);
for(i = 0; i < n ;i++)
printf("item %d is %s\n", i+1, list[i]);
return 0;
}
void sortChars(char *str)
{
int i,j;
int len = strlen(str);
for(i = 0; i< len -1;i++)
{
for(j = 0 ;j<len-i-1;j++)
{
if(str[j]>str[j+1])
{
char tem = str[j];
str[j] = str[j+1];
str[j+1]= tem;
}
}
}
}
void sortList(char *ptr[], int size)
{
int i;
for(i = 0; i < size; i++)
{
if(strcmp(ptr[i], ptr[i+1]) > 0)
swap(ptr,i,i+1);
}
}
void swap(char *ptra[], int a, int b)
{
char *temp = ptra[a];
ptra[a] = ptra[b];
ptra[b]= temp;
}
代码应该对字符串进行排序。然后对列表中字符串的顺序进行排序。
这是我得到的示例:
Enter string 1: hello
Enter string 2: world
item 1 is hello
item 2 is world
item 1 is ehllo
item 2 is dlorw
item 1 is =
item 2 is ▒▒3
您的
void sortList(char *ptr[], int size)
功能错误。
必须是:
void sortList(char* ptr , int size)
{
int i;
for(i = 0; i < size; i++)
{
if(strcmp(ptr[i], ptr[i+1]) > 0)
swap(ptr,i,i+1);
}
}
当您将数组(即
list
)作为参数传递给函数时,它会衰减为指向数组第一个元素地址的指针。例如,请阅读更多此处。