小弟采用最基本的冒泡排序处理数组形式的字符,
只会按ASCII码整理得ABCabc的结果。
求高人指点,多谢!
PHP中文网2017-04-17 14:45:38
把小寫轉大寫比較
也不知道,踩此答案的人是什麼心理~
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 ;
}
怪我咯2017-04-17 14:45:38
做字元到數字的轉換,範例如下:
'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'])
高洛峰2017-04-17 14:45:38
建議學學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);