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

浏览:28日期:2023-04-13

问题描述

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

问题解答

回答1:

把小写转大写后比较

也不知道,踩此答案的人是什么心理~ 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('%sn', 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('%sn', str);}

效果:c++ - 用冒泡排序处理字符,要求BCAbca整理成AaBbCc。

如何保证 ‘a’ 一定在 ‘A’ 后面?

@brayden

unsigned char Upper(char c){ char isLow = (c>=’a’ && c<=’z’); return ((isLow ? c-32 : c) << 1) + isLow ;}

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

回答2:

一个想法是类似于将a转换成介于AB之间的一个数字 即asc码+0.5

回答3:

做字符到数字的转换,示例如下:

’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’])回答4:

建议学学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; elsereturn a<b-32;}else{ if (upper(b))return a-32<b; elsereturn a < b;} }; std::sort(str, str+6, cmp);回答5:

小弟受到答案的启发试着写了个,主要思想是把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;}

相关文章: