用冒泡排序处理字符,要求BCAbca整理成AaBbCc。

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

回答:

把小写转大写后比较


也不知道,踩此答案的人是什么心理~
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 ;

}

图片描述

回答:

一个想法是类似于将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;

}

以上是 用冒泡排序处理字符,要求BCAbca整理成AaBbCc。 的全部内容, 来源链接: utcz.com/p/192217.html

回到顶部