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

小弟采用最基本的冒泡排序处理数组形式的字符,
只会按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學習者快速成長!