编程实现字符串中各单词的翻转
1 #include <iostream>
2 using namespace std;
3
4 void RevStr(char *src)
5 {
6 char *start = src, *end = src, *ptr = src;
7
8 while(*ptr++ != '\0');
9 end = ptr-2; //找到字符串末尾
10 while(start < end)
11 {
12 swap(*start++, *end--); //逆置整个字符串
13 }
14
15 start = src, end = ptr-2;
16 ptr = start;
17 while(*ptr++ != '\0')
18 {
19 if(*ptr == ' ' || *ptr == '\0') //找到单词
20 {
21 end = ptr - 1; //end指向单词末尾
22 while(start < end)
23 swap(*start++, *end--); //逆置单词
24
25 start = end = ptr+1; //指向下一个单词开头
26 }
27 }
28 }
29
30 int main()
31 {
32 char src[] = "I am from Shanghai";
33 cout << src << "\n";
34 RevStr(src);
35 cout << src << "\n";
36
37 return 0;
38 }
反转字符串,但其指定的子串不反转
1 #include <iostream>
2 #include <cassert>
3 #include <stack>
4 using namespace std;
5
6 const char* reverse(const char* s1, const char* token)
7 {
8 stack<char> stack1;
9 const char* ptoken = token, *head = s1, *rear = s1;
10 assert(s1 && token);
11 while (*head != '\0')
12 {
13 while(*head != '\0' && *ptoken == *head)
14 {
15 ptoken++;
16 head++;
17 }
18 if(*ptoken == '\0')
19 {
20 const char* p;
21 for(p=head-1; p>=rear; p--)
22 {
23 stack1.push(*p);
24 }
25 ptoken = token;
26 rear = head;
27 }
28 else
29 {
30 stack1.push(*rear++);
31 head = rear;
32 ptoken = token;
33 }
34 }
35 char *pReturn = new char[strlen(s1)+1];
36 int i=0;
37 while(!stack1.empty())
38 {
39 pReturn[i++] = stack1.top();
40 stack1.pop();
41 }
42 pReturn[i]='\0';
43
44 return pReturn;
45 }
46
47 int main(int argc, char* argv[])
48 {
49 char welcome[] = "Welcome you, my friend";
50 char token[] = "you";
52
51 const char *pRev = reverse(welcome, token);
53 cout << "before reverse:" << endl;
54 cout << welcome << endl;
55 cout << "after reverse:" << endl;
56 cout << pRev << endl;
57
58 return 0;
59 }