
正文
笔试题——C++字符排序
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
题目:字符排序
题目介绍:输入一组以空格隔开的字数串,将它们奇数位升序排序,偶数位降序排序,再重新输出成新的字数串。
例:
输入:
4 6 2 3 6 7 8 1
奇数位:4 2 6 8 ——2 4 6 8
偶数位:6 3 7 1 ——7 6 3 1
输出:
2 7 4 6 6 3 8 1
分析:未预定输入位数,数组处理即可。
代码:
#include <iostream>
#include <string>
#include <conio.h>
using namespace std;
int main()
{
char a[],b[],d[];
int i = ;
int k = ;
int l = ;
char mid;
char c;
while ((c=_getch()) != '\r')
{
if (c >= ''&&c <= '')
{
a[i]=c;
cout << a[i] << " ";
i++;
}
}
cout << endl;
for (int j = ; j < i;j++)
{
if (j % == )//奇数位
{
b[k] = a[j];
k++;
}
if (j % == )//偶数位
{
d[l] = a[j];
l++;
}
}
for (int j = ; j < k; j++)
{
for (int e = ; e < k; e++)
{
if (b[j] > b[e] &&( j < e))
{
mid = b[j];
b[j] = b[e];
b[e] = mid;
}
}
}
for (int j = ; j < k; j++)
{
cout << b[j] << " ";
}
cout << endl;
for (int j = ; j < l; j++)
{
for (int e = ; e < l; e++)
{
if (d[j] < d[e] && (j < e))
{
mid = d[j];
d[j] = d[e];
d[e] = mid;
}
}
}
for (int j = ; j < l; j++)
{
cout << d[j] << " ";
}
cout << endl;
for (int j = ; j < i; j++)
{
if (b[j] >= ''&&b[j] <= ''&&d[j] >= ''&&d[j] <= '')
{
cout << b[j] << " " << d[j] << " ";
}
}
}
结果:

分析:若要进一步优化代码,可以从排序入手,比如设置一个max函数输入为a,b判定大小返回true或者false;或者直接用排序函数sort;将奇数位和偶数位分别储存进不同数组好处是思路清晰,如果优化可以放在一个数组中用if来区分奇偶排序。







