【问题标题】:How to sort the letters in a string into alphabetical order in c / c++? [closed]如何在c / c ++中将字符串中的字母按字母顺序排序? [关闭]
【发布时间】:2011-08-30 07:38:31
【问题描述】:

大家好 在这段代码中,当我写 AaBc 时,它会写 ' ABab' 。 我应该在这段代码中改变什么,如果我想要它写成'AaBb'???

#include <stdlib.h>
#include<iostream.h>
#include<string.h>
int main (void)
{
    char string[128], temp;
    int n, i, j;

    printf("\nEnter string: ");
    gets(string);

    n = strlen(string);

    for (i=0; i<n-1; i++)
    {
        for (j=i+1; j<n; j++)
        {
            if (string[i] > string[j])
            {
                temp = string[i];
                string[i] = string[j];
                string[j] = temp;
            }
        }
    }
    printf("\n%s", string);
    printf("\n");
    return 0;
}

【问题讨论】:

  • 当你输入AaBc时它永远不会写AaBb
  • 我编辑了标题,因为它与示例代码不匹配。
  • 这看起来像 C 而不是 C++。还是只有我?
  • @kevin,在我看来就像 C/C++ 语言;)
  • 您应该在yahoo answers 的回答中注明正确的归属。

标签: c++ c sorting


【解决方案1】:

'A''a' 的 ASCII 值不一样。 'A' == 65'a' == 97

因此,当您比较时,您需要使用tolowertoupper 进行比较,以确保您的值是正确的。进行比较后,您还需要然后进行比较以查看它是大写还是小写(以确保先大后小排序)。

【讨论】:

    【解决方案2】:

    您首先需要进行不区分大小写的比较,如果字母相同,则进行区分大小写的比较。

    #include 
    #include
    #include
    int 主要(无效)
    {
        字符字符串[128],温度;
        整数 n, i, j;
    
        printf("\n请输入字符串:");
        获取(字符串);
        n = strlen(字符串);
    
        对于 (i=0; i 0)
                {
                    临时=字符串[i];
                    字符串[i] = 字符串[j];
                    字符串[j] = 温度;
                }
            }
        }
        printf("\n%s", 字符串);
        printf("\n");
        返回0;
    }

    【讨论】:

      【解决方案3】:

      您需要一个客户比较函数来传递给 sort(或 qsort)。

      bool comp(char c1, char c2)
      {
          return tolower(c1) < tolower(c2);
      }
      
      int main()
      {
          std::string str = "ABab";
          std::sort(str.begin(), str.end(), comp);
          cout << str << endl;
          return 0;
      }
      

      【讨论】:

      • 这可能不是所需要的。输入“ABabABab”的代码将给出“AaAaBbBb”,这并不是真正的“排序”。
      • 没错,但我认为 OP 可以想办法将任何逻辑放入所需的比较函数中。
      猜你喜欢
      • 1970-01-01
      • 2020-04-16
      • 2017-11-21
      • 1970-01-01
      • 2018-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      相关资源
      最近更新 更多