排序字符而不替换

时间:2013-12-07 14:27:03

标签: c algorithm sorting

尝试在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);

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

2 个答案:

答案 0 :(得分:3)

一种方法是strdup()原始字符串并对结果进行排序(最后不要忘记free())?

答案 1 :(得分:0)

如何使用索引进行排序。

#include <stdio.h>

int main(){
    const char *stroka="This programmator";
    int n=17;
    unsigned char index[n]; //or malloc 
    for(int i=0;i<n;++i)
        index[i]=i;
    for (int i=n-1;i>=0;i--)
        for (int j=n-2;j>=0;j--)
            if(stroka[index[j]]>stroka[index[j+1]]){
                unsigned char tmp;
                tmp=index[j];
                index[j]=index[j+1];
                index[j+1]=tmp;
            }
    for(int i=0;i<n;++i)// Taaghimmooprrrst
        putchar(stroka[index[i]]);//printf("%s",stroka);
    return 0;
}