第八十八题(金山笔试题,字符串移动)
来源:互联网 发布:iphone5s联通4g网络 编辑:程序博客网 时间:2024/05/01 07:27
88.2005 年11 月金山笔试题。编码完成下面的处理函数。
函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5。(要求使用尽量少的时间和辅助空间)。
思路:使用小标i和j分别来遍历字符串中的*字符和非*字符。
首先使下标j要跳过字符串最后面的非*字符(如果有的话),然后在while循环里执行这样的操作:移动j到当前位置的下一个非*字符处,移动过程中记录经过的*个数,移动i到当前位置的下一个*字符处,交换j,i处字符,重复上面的操作直到遍历到字符串起始位置。
C++代码:
#include<iostream>using namespace std;namespace MS100P_88{int strMove(char* str){int i = strlen(str)-1;//i遍历字符串中的*int j = i;//j遍历字符串中的非*字符int count = 0;while (j > 0 && str[j] != '*') j--; //跳过最后面的非'*'字符while (j >= 0&&i>=0){while (str[i] != '*'&&i >= 0)i--;while (str[j] == '*'&&j >=0){j--;count++;}str[i--] = str[j];str[j--] = '*';}return count;}void test(){char str[] = "ab**cd**e*12";cout << str << endl;cout << "num of * is: " << strMove(str) << endl;cout << str << endl;}}int _tmain(int argc, _TCHAR* argv[]){MS100P_88::test();return 0;}
运行结果:
0 0
- 第八十八题(金山笔试题,字符串移动)
- 金山笔试题(武汉)
- kingsoft金山笔试题
- 金山笔试题集锦
- 金山部分笔试题
- 一道金山笔试题
- 金山的笔试题
- 金山笔试题9.25
- 金山笔试题 C++
- 金山软件笔试题
- 金山一道笔试题
- 金山WPS笔试题
- 231 金山笔试题
- 金山笔试题二
- 一道2005金山笔试题
- 金山软件网上笔试题
- 万恶的金山笔试题
- 金山笔试题中的SwapSort
- PhoneGap与Cordova之间的关系
- Word Search
- oracle11g 相关链接
- iframe自适应内容高度的处理方法
- 大数类
- 第八十八题(金山笔试题,字符串移动)
- word插入图片显示不完整的解决办法
- MTK Android Driver :sound
- Evaluate Reverse Polish Notation
- 关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用
- 今日作息及食谱(7.5)
- 被卡住的进度条
- Android中覆盖
- 最长上升子序列