【算法习作】字符串处理两例
2012-12-21 15:41
78 查看
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
1.按词倒置一个句子
题目:例如”I am a student”,经处理后得到”student am a I”,限定除了一个空格外单词间没有任何其他分隔符。
解析:将整个字符串倒置后分别对每一个词进行倒置即可。
2.左旋转字符串
题目:输入:abcdefg,2 , 输出:cdefgab ,复杂度要求:不使用额外空间存储字符串。
思路:S=abcdefg , S1=ab, S2=cdefg, !S1=ba, !S2 = gfedc => !((!S1)(!S2)) 即为所求。也就是说先按欲倒置的位置将原字符串划分为两个子串,分别倒置,然后再将整个字符串倒置即可求得。
辅助函数reverseString为:
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
出处:http://www.cnblogs.com/gnuhpc/
1.按词倒置一个句子
题目:例如”I am a student”,经处理后得到”student am a I”,限定除了一个空格外单词间没有任何其他分隔符。
解析:将整个字符串倒置后分别对每一个词进行倒置即可。
1: /*
2: * =====================================================================================
3: *
4: * Filename: rotateString.cpp
5: *
6: * Description: rotate a string with the sequences of a word kept
7: *
8: * Version: 1.0
9: * Created: 04/15/2011 04:28:13 PM
10: * Revision: none
11: * Compiler: g++
12: *
13: * Author: gnuhpc (http://blog.csdn.net/gnuhpc), warmbupt@gmail.com
14: *
15: * =====================================================================================
16: */
17:
18: #include "../include/utils.h"
19:
20: void rotateString(string& target_string)
21: {
22: size_t size = target_string.size();
23: size_t begin = 0;
24: size_t end = size-1;
25: reverseString(target_string,begin,end);
26:
27: begin = 0;
28: end = 0;
29:
30: while(end!=size)
31: {
32: if(target_string[end]!=' '){
33: ++end;
34: }
35: else{
36: reverseString(target_string,begin,end-1);
37: begin = end+1;
38: ++end;
39: }
40: }
41: }
42:
43: int main(int argc, char *argv[])
44: {
45: string target_string;
46: cout << "please tell me the string:"<<endl;
47: getline(cin, target_string);
48:
49: cout << target_string << endl;
50: rotateString(target_string);
51: cout << target_string << endl;
52: }
2.左旋转字符串
题目:输入:abcdefg,2 , 输出:cdefgab ,复杂度要求:不使用额外空间存储字符串。
思路:S=abcdefg , S1=ab, S2=cdefg, !S1=ba, !S2 = gfedc => !((!S1)(!S2)) 即为所求。也就是说先按欲倒置的位置将原字符串划分为两个子串,分别倒置,然后再将整个字符串倒置即可求得。
1: /*
2: * =====================================================================================
3: *
4: * Filename: rotateString.cpp
5: *
6: * Description: rotate a string from a specific position
7: *
8: * Version: 1.0
9: * Created: 04/15/2011 04:28:13 PM
10: * Revision: none
11: * Compiler: g++
12: *
13: * Author: gnuhpc (http://blog.csdn.net/gnuhpc), warmbupt@gmail.com
14: *
15: * =====================================================================================
16: */
17:
18: #include "../include/utils.h"
19:
20: void rotateString(string& target_string, const size_t position)
21: {
22: assert((position>1)&&(position<target_string.size()));
23: int size = target_string.size();
24: size_t A_begin = 0;
25: size_t A_end = position-1;
26: size_t B_begin = position;
27: size_t B_end = size-1;
28: reverseString(target_string,A_begin,A_end);
29: reverseString(target_string,B_begin,B_end);
30: reverseString(target_string,A_begin,B_end);
31:
32: cout << target_string <<endl;
33: }
34:
35: int main(int argc, char *argv[])
36: {
37: string target_string;
38: genRandomString(target_string,10);
39: size_t position;
40: cout << target_string << endl;
41: cout << "please tell me the position:"<<endl;
42: cin >> position;
43:
44: rotateString(target_string,position);
45: }
辅助函数reverseString为:
1: void reverseString(string &target_string, size_t begin, size_t end)
2: {
3: while(begin<end){
4: target_string[begin]^=target_string[end];
5: target_string[end]^=target_string[begin];
6: target_string[begin]^=target_string[end];
7: ++begin;
8: --end;
9: }
10: }
作者:gnuhpc
出处:http://www.cnblogs.com/gnuhpc/
相关文章推荐
- 【算法习作】字符串处理两例
- 【算法入门经典】 字符串处理部分总结
- 字符串处理算法(五)多线程实现代码行数统计。[风林火山]
- 复杂字符串处理算法
- 字符串处理算法(六)求2个字符串最长公共部分
- 字符串处理基础算法-KMP
- 字符串处理算法(八)将字符串中连续出席的重复字母进行压缩(华为校园招聘题)
- 字符串处理算法(三)按指定位置交换字符串两部分的位置
- [noip][c/c++]关于字符串中前导0和后导0的处理算法
- 简单算法—字符串处理
- ACM字符串处理算法经典:字符串搜索
- 【字符串处理算法】回文判断的算法设计及C代码实现
- 【字符串处理算法】删除特定的字符的算法设计及C代码实现
- 算法细节系列(14):动态规划之字符串处理
- 关于字符串处理的一系列类似算法
- 【字符串处理算法】字符串包括的算法设计及C代码实现
- 算法入门-第一天-字符串处理
- 【字符串处理算法】将输入字符串中的各个单词反序的算法设计及C代码实现
- [转载] 字符串处理相关算法
- P1001 蓝桥杯算法提高-用字符串处理大数乘法