在句子中按字母顺序对字符串中的字符进行排序

时间:2019-01-25 01:11:16

标签: c

我遇到的问题是排序多个单词和区分大小写。

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

   int main() {
           char str[100], result[100], ch;
           int no[52] = {0}, n, c, t, x;
           printf("Enter a string: ");
           scanf("%[^\n]", str);
           n = strlen(str);

          //store how many times a-z characters appear in str
          for (c = 0; c < n; c++) {
          ch = str[c] - 'a';
          no[c]++;
          }
          t = 0;

          //insert the characters a-z in output which contains characters
          //in alphabetical order
          for (ch = 'a'; ch <= 'z'; ch++) {
                  x = ch - 'a';
                  for (c = 0; c < no[x]; c++) {
                          result[t] = ch;
                          t++;
                  }
          }
          result[t] = '\0';
          printf("%s\n", result);
          return 0;
  }

输出:您好-> ehllo


我正在寻找的是  输出:来自Ka的Hello World-> eHllo dlorW Fmor aK


是否有任何库或函数可以简化此过程?

1 个答案:

答案 0 :(得分:0)

您似乎可以使用两个迭代器(一个头部和一个尾部)并就位处理每个“单词”,一次一次。

您的排序顺序“应该”是不区分大小写的排序,并且您似乎有一些代码从每个字符中减去“ a”,以将值重新设置/偏移到数组中。但是,我看不到任何将大写字母转换为小写字母的代码(根据您的要求,这仅是排序所必需的,您仍应输出原始的大写字母输入。)

我没有看到在字符串中存储任何字符计数的原因,可能会删除或弄清楚。

欢迎堆栈溢出。一种获得更好的响应并帮助解决问题的方法是包括一些有关您要执行的操作的详细信息,而不仅仅是代码。如果必须包含用于传达问题的代码,请考虑将其分解为单独的块。这不仅可以帮助我们理解您是否有多个问题(社区会让您知道!),而且还可以帮助您了解如何简化问题,以便更快地获得更好的帮助:)可能属于https://codereview.stackexchange.com/网站。同样,按原样对StackOverflow进行问答可能不是很好。

HTH!