C 字母数组排序
我对C中的字符排序确实有点问题。如果我想按字母顺序从z到a对数组排序,它就可以正常工作。当我试着做相反的事情,从a到z,它不起作用。。我需要一些帮助,谢谢;)C 字母数组排序,c,arrays,linux,sorting,C,Arrays,Linux,Sorting,我对C中的字符排序确实有点问题。如果我想按字母顺序从z到a对数组排序,它就可以正常工作。当我试着做相反的事情,从a到z,它不起作用。。我需要一些帮助,谢谢;) #包括 #包括 int main(){ chars1[10],a; int i,t; printf(“输入要排序的集合:”); scanf(“%s”,s1); t=1; //printf(“%d组长度”,strlen(s1)); 而(t==1) { //printf(“a\n”); t=0; 对于(i=0;i,这里有一个大问题: if (
#包括
#包括
int main(){
chars1[10],a;
int i,t;
printf(“输入要排序的集合:”);
scanf(“%s”,s1);
t=1;
//printf(“%d组长度”,strlen(s1));
而(t==1)
{
//printf(“a\n”);
t=0;
对于(i=0;i,这里有一个大问题:
if (s1[i]<s1[i+1])
if(s1[i]如果只使用1个循环,那么它不会对所有组合进行排序。因此,请使用冒泡排序逻辑
while (t==1)
{
// printf("a\n");
t=0;
for (i=0;i<strlen(s1)-1;i++)
{
for(j=0;j<strlen(s1)-1-i;j++)
{
if (s1[j]<s1[j+1])
{
// printf("s");
t=1;
a=s1[j+1];
s1[j+1]=s1[j];
s1[j]=a;
}
}
}
}
while(t==1)
{
//printf(“a\n”);
t=0;
对于(i=0;i仅供参考)而言,在C中实现这一点的理想方法是:
#包括//qsort
#包括//toupper
#包括//打印
int chrcmp(常数无效*obj1,常数无效*obj2)
{
char ch1=*(常量char*)obj1;
char ch2=*(常量char*)obj2;
ch1=toupper(ch1);//删除区分大小写
ch2=最大值(ch2);
return ch1-ch2;//整数提升将隐式地使此int
}
int main()
{
char str[]=“按字母顺序排列字母和符号”;
put(str);
qsort(str,//要排序的数组
sizeof(str)-1,//数组中的项数(减去nullterm)
sizeof(char),//每个项目的大小
chrcmp);//比较函数
put(str);
返回0;
}
输出:
Sort letters and symbols alphabetically
aaaabbcdeeehilllllmnooprrSsssttttyy
它不会,因为“i”将达到最大值“lenght-1”,这要感谢“idejvid@dejvid-Aspire-V5-431~/Desktop/C/test$./test输入要排序的集合:abcdefg 7集合长度gfedcbasorted@user3395711那张支票,i
将确保i
有效且在范围内,但随后您将使用i+1
,其最后一个字符将与strlen(s1)
相同,即超过最后一个“实”字符"字符串中的字符,实际上是字符串终止符。当然,这通常很重要,在这种情况下,这并不重要,因为0
比任何正常的字符输入都要少,而且…哦,好吧,我认为他在按降序排序时遇到了问题。也许你应该澄清一下为什么它会起作用,意外地,w当按降序排序时,为什么按升序排序后会变成空字符串,这是他/她首先问这个问题的主要原因@Joachim:D@user3395711好的。阅读以了解如何使用stackoverflow。接受一个正确答案,并对所有有用的答案进行投票
Sort letters and symbols alphabetically
aaaabbcdeeehilllllmnooprrSsssttttyy