一道经典面试题,字符数组排序问题(字符包含a-z、A-Z、0-9.)
2015-04-10 21:51
337 查看
一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,
所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
解析:可以将整个字符数组进行排序,然后将整个数组逆序,然后a-z、A-Z、0-9在分别逆序就可以了
//一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,
//所有数字放在最后,而且各部分内部分别有序。
#include <iostream>
#include <cstring>
#include<algorithm>
using namespace std;
void reverse_aA0(char arr[], unsigned int length)
{
sort(arr, arr + length);//使数字字符在前且内部有序, 大写字母在中间且有序, 小写字母在后面且有序
reverse(arr, arr + length);// 使小写字母在前面且内部逆序, 大写字母在中间且逆序, 数字字符在后面且逆序
unsigned int i = 0, j = 0;
for (i=0; i < length; ++i)
if (arr[i] >= 'A' && arr[i] <= 'Z')
{
break;
}
reverse(arr, arr + i);
for (j=i; j < length; ++j)
{
if (arr[j] >= '0' && arr[j] <= '9')
{
break;
}
}
reverse(arr + i, arr + j );
reverse(arr + j, arr + length);
}
int main()
{
char arr[20] = "BACDQFHG";//换为"BACDQFHG2483abxyefg"也是可以的
reverse_aA0(arr, strlen(arr));
cout << arr << endl;
return 0;
}
关于sort()函数用法可以参考我的http://blog.csdn.net/u014082714/article/details/44778877
类似面试题http://blog.csdn.net/u014082714/article/details/44339993
所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
解析:可以将整个字符数组进行排序,然后将整个数组逆序,然后a-z、A-Z、0-9在分别逆序就可以了
//一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,
//所有数字放在最后,而且各部分内部分别有序。
#include <iostream>
#include <cstring>
#include<algorithm>
using namespace std;
void reverse_aA0(char arr[], unsigned int length)
{
sort(arr, arr + length);//使数字字符在前且内部有序, 大写字母在中间且有序, 小写字母在后面且有序
reverse(arr, arr + length);// 使小写字母在前面且内部逆序, 大写字母在中间且逆序, 数字字符在后面且逆序
unsigned int i = 0, j = 0;
for (i=0; i < length; ++i)
if (arr[i] >= 'A' && arr[i] <= 'Z')
{
break;
}
reverse(arr, arr + i);
for (j=i; j < length; ++j)
{
if (arr[j] >= '0' && arr[j] <= '9')
{
break;
}
}
reverse(arr + i, arr + j );
reverse(arr + j, arr + length);
}
int main()
{
char arr[20] = "BACDQFHG";//换为"BACDQFHG2483abxyefg"也是可以的
reverse_aA0(arr, strlen(arr));
cout << arr << endl;
return 0;
}
关于sort()函数用法可以参考我的http://blog.csdn.net/u014082714/article/details/44778877
类似面试题http://blog.csdn.net/u014082714/article/details/44339993
相关文章推荐
- 一道字符数组的全排序问题
- 面试题精选(87):两数组包含问题(来自微软面试题)
- 一道经典的关于Fibonacci数列的面试题(问题)的新想法 -> N阶楼梯问题
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序。
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 面试题:数组按列排序的问题
- c语言字符指针数组经典,此后不必再担心字符串问题.
- 2015 去哪儿校招--对字符数组中元素包含某个单词个数的排序
- 每日一道算法题:微软面试题:在排序数组中,找出给定数字出现的次数
- 两数组包含问题(来自微软面试题)
- 一个字符数组,里面的字符可能是a-z、A-Z、0-9.现在要求对数组进行排序,要求所有小写字符放在最前面,所有大写字符放在中间,所有数字放在最后,而且各部分内部分别有序(创新工场)
- [经典面试题][搜狗]在一个字符串中寻找包含全部出现字符的最小字串
- 一道面试题:对一个数组进行排序,要求第一个最大、第二
- 给定一个字符数组,求由这些字符组成的所有不同的排序问题.
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 一道数组排序问题
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 一道经典的面试题--12小球称重问题
- [经典面试题]排序数组中绝对值最小元素
- 经典map集合问题,黑马作业题,1.利用键盘录入,输入一个字符串,.统计该字符串中各个字符的数量(提示:字符不用排序)