c++ - 用冒泡排序处理字符,要求BCAbca整理成AaBbCc。
PHP中文网
PHP中文网 2017-04-17 14:43:38
0
5
840

小弟采用最基本的冒泡排序处理数组形式的字符,
只会按ASCII码整理得ABCabc的结果。
求高人指点,多谢!

PHP中文网
PHP中文网

认证高级PHP讲师

répondre à tous(5)
洪涛

把小写转大写后比较


也不知道,踩此答案的人是什么心理~
C语言的例子

#include <stdio.h>
char Upper(char c){
    if (c>='a' && c<='z'){
        c = c - ' ';//32;
    }
    return c;
}
void main(){
    char str[] = {"BCAbca"};
    int temp;
    int len = sizeof(str)/sizeof(char);
    len = len - 1; 
    
    printf("%s\n", str);
    for(int i = 0 ; i<len-1 ; i++){
        for(int j = 0 ; j <len - i -1 ; j++ ){
            if(Upper(str[j])>Upper(str[j+1])){ // 小写变成大写 后比较
                temp = str[j];
                str[j] = str[j+1];
                str[j+1] = temp;                   
            }
        }
    }
    printf("%s\n", str);
}

效果:


如何保证 ‘a’ 一定在 ‘A’ 后面?

@brayden

unsigned char Upper(char c){
    char isLow = (c>='a' && c<='z');
    return ((isLow ? c-32 : c) << 1) + isLow ;
}

PHPzhong

一个想法是类似于将a转换成介于AB之间的一个数字 即asc码+0.5

刘奇

做字符到数字的转换,示例如下:

'A' => 0
'a' => 1
'B' => 2
'b' => 3
...

大概这样:

int arr['z' - 'A' + 1];
for (int i = 0; i < 26; i++) {
    arr[i] = 2 * i;
    arr[i + 'a'] = 2 * i + 1;
}    

比较 char c1, c2 即为:

if (arr[c1 - 'A'] < arr[c2 - 'A'])
小葫芦

建议学学C++。

    char str[]="BCAbca";
    auto cmp = [](char a, char b)
    {
        auto upper = [](char c)
        {
            return ( c >= 'A'&&c <= 'Z' );
        };
        auto lower = [](char c)
        {
            return ( c >= 'a'&&c <= 'z' );
        };
        if (upper(a))
        {
            if (upper(b))
                return a < b;
            else
                return a<b-32;
        }
        else
        {
            if (upper(b))
                return a-32<b;
            else
                return a < b;
        }
    };
    std::sort(str, str+6, cmp);
阿神
小弟受到答案的启发试着写了个,主要思想是把Aa到Zz这52个字母对应1到52,再通过排序即可按要求输出
排序方法使用的是选择排序,改用冒泡也行啦

#include <iostream>
using namespace std;

void out(int a[], int n)//输出整型数组
{
    for (int k = 0; k < n; k++)
        cout << a[k] << "  ";
    cout << endl;
}

void selectsort(int a[], int n)//选择排序
{
    int i, j, min;
    for (i = 0; i < n; i++)
    {
        min = i;
        for (j = i + 1; j < n; j++)
        {
            if (a[j] < a[min])
            {
                min = j;
            }
        }
        swap(a[i], a[min]);
        out(a, n);//逐趟输出
    }
}

void main()
{
    char a[11] = { 'a','f','E','c','b','n','M','d','F','N','g' };
    int b[11];
    char c[11];
    for (int i = 0; i < 11; i++)
    {
        if (a[i] >= 65 && a[i] <= 90)
        {
            b[i] = int(a[i] * 2 -129);//大写字母对应1到52中的奇数
        }
        else
        {
            b[i] = int(a[i] * 2 -192);//小写对应偶数
        }
    }
    selectsort(b, 11);
    for (int j = 0; j < 11; j++)//将整型转化回字符以输出
    {
        if (b[j] % 2 != 0)
        {
            c[j] = char((b[j] + 129) / 2);
        }
        else
        {
            c[j] = char((b[j] + 192) / 2);
        }
    }
    selectsort(b, 11);
    for (int k = 0; k < 11; k++)//输出字符数组
        cout << c[k] << "  ";
    cout << endl;
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal