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

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

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(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);
阿神

雷雷

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!