如何在c / c ++中将字符串中的字母按字母顺序排序?

时间:2011-05-21 17:48:59

标签: c++ c sorting

大家好 在这段代码中,当我写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;
}

3 个答案:

答案 0 :(得分:7)

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

因此,在进行比较时,您需要使用tolowertoupper进行比较,以确保您的值正确。进行比较后,您需要然后进行比较以查看它是大写还是小写(以确保上限,然后是更低的顺序)。

答案 1 :(得分:4)

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

#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++)
        {
            int  s = tolower(string[i]) - tolower(string[j]);
            if ( s == 0 )
            {   // letters are the same... now watch out for case
                s = string[i] - string[j];
            }

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

答案 2 :(得分: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;
}