Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 字母数组排序_C_Arrays_Linux_Sorting - Fatal编程技术网

C 字母数组排序

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 (

我对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 (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