尝试在C中以字符串形式对字符进行排序。对它们的ASCII码进行排序。我尝试了冒泡排序和选择排序方法。

char stroka[]="This programmator";
int n=17,tmp;

for (int i=n-1;i>=0;i--)
    for (int j=n-2;j>=0;j--)
        if(stroka[j]>stroka[j+1])
        {
            tmp=stroka[j];
            stroka[j]=stroka[j+1];
            stroka[j+1]=tmp;
        }
printf("%s",stroka);


此分配的一切都很好:

char stroka[]="This programmator";


但这失败了

char *stroka="This programmator";


因为此算法会编辑受保护的数组。
我可以使另一个堆值像

char *stroka_new= malloc(17);


并在其中写入排序数组。它不受保护。
如何使其按新值排序?也许有人知道排序算法而不替换值?

最佳答案

一种方法是strdup()原始字符串并对结果进行排序(不要忘了在结尾处free())?

10-01 09:30