Heim > Fragen und Antworten > Hauptteil
小弟采用最基本的冒泡排序处理数组形式的字符,
只会按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);
阿神2017-04-17 14:45:38
小弟受到答案的启发试着写了个,主要思想是把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;
}