尝试在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);
并在那里写出排序数组。它没有受到保护。 如何使其按新值排序?也许有人知道排序算法而不替换值?
答案 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;
}