C字母数组按任意方式排序

时间:2014-03-26 07:46:04

标签: c arrays linux sorting

我在C中排序字符时遇到了一些问题。如果我想按字母顺序从z到a对数组进行排序,它的工作正常。当我尝试相反时,从a到z,它不起作用..我可以使用一些帮助,谢谢;)

#include <stdio.h>
#include <string.h>

int main () {
    char s1[10],a;
    int i,t;
    printf("enter a set to sort: ");
    scanf("%s",s1);
    t=1;
//  printf("%d length of set",strlen(s1));
    while (t==1)
    {
//      printf("a\n");
        t=0;
        for (i=0;i<strlen(s1);i++)
            {
                if (s1[i]<s1[i+1])
                {
//              printf("s");
                t=1;
                a=s1[i+1];
                s1[i+1]=s1[i];
                s1[i]=a;
                }
            }
    }
    printf("%s sorted",s1);
}

3 个答案:

答案 0 :(得分:1)

这是一个很大的问题:

if (s1[i]<s1[i+1])

这会将字符串中的最后一个字符与字符串终止符进行比较。因此,您将对字符串进行排序,包括字符串终止符,这不是您想要的。

答案 1 :(得分:0)

如果您只使用1个循环,则不会对所有组合进行排序。所以使用bubble排序逻辑。

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;
                }
              }
            }
    }

答案 2 :(得分:0)

仅供参考,在C中执行此操作的理想方法是:

#include <stdlib.h>         // qsort
#include <ctype.h>          // toupper
#include <stdio.h>          // printing

int chrcmp (const void* obj1, const void* obj2)
{
  char ch1 = *(const char*)obj1;
  char ch2 = *(const char*)obj2;

  ch1 = toupper(ch1);       // remove case-sensitivity
  ch2 = toupper(ch2);

  return ch1 - ch2;         // integer promotion will make this int implicitly
}


int main()
{
  char str[] = "Sort letters and symbols alphabetically";

  puts(str);

  qsort (str,                // the array to sort
         sizeof(str)-1,      // the number of items in the array (minus nullterm)
         sizeof(char),       // the size of each item
         chrcmp);            // comparison function

  puts(str);

  return 0;
}

输出:

Sort letters and symbols alphabetically
    aaaabbcdeeehilllllmnooprrSsssttttyy