反转字符串:
作为面试题出现频率最高的手写代码题,有必要做一下总结。
【形式1】:
题目:
/* 反转字符串-1: orgin = "where‘d you go?" dest = "?og uoy d‘erehw" */
分析:很容易的题目。解决方法有2种:可以递归输出、也可以“头尾”指针向中间移动,边移动变交换。
代码实现:(vs2017下测试通过)
1 #include<iostream> 2 using namespace std; 3 4 void reserve01(char *origin) 5 { 6 if (*origin == ‘\0‘) 7 { 8 return; 9 } 10 else 11 { 12 reserve01(origin + 1); 13 cout << *origin ; 14 } 15 } 16 17 void reserve02(char origin[], int length) 18 { 19 char *head = origin; 20 char *tail = origin + length - 1; 21 while (head != tail) 22 { 23 char temp = *head; 24 *head = *tail; 25 *tail = temp; 26 head ++; 27 tail--; 28 } 29 } 30 31 int main() 32 { 33 char origin[] = "where‘d you go?"; 34 35 // 方法1:采用递归的方式直接输出 36 reserve01(origin); 37 cout << endl; 38 39 // 方法2:在origin上直接逆置 40 reserve02(origin, 15); 41 42 // 输出方法2的返回值 43 cout << origin << endl; 44 45 system("pause"); 46 return 0; 47 }
【形式2】:
题目:
/* 反转字符串-2: orgin = "where‘d you go?" dest = "d‘erehw uoy ?og" */
分析过程:如图所示,
代码实现:(vs2017下测试通过)
1 #include<iostream> 2 using namespace std; 3 4 void reserverOneWord(char *r, char *p) 5 { 6 while (r < p) 7 { 8 char temp = *r; 9 *r = *p; 10 *p = temp; 11 r++; 12 --p; 13 } 14 } 15 16 void reserverString(char *str) 17 { 18 char *p, *q, *r; 19 20 p = str; 21 while (*p == ‘ ‘) // 让 p r指向第一个非空格的字符,为了处理“ hello world”这种情况 22 ++p; 23 if (*p == ‘\0‘) // 为了处理" "这种情况 24 return; 25 26 r = p; 27 q = p + 1; 28 29 while (*q != ‘\0‘) 30 { 31 if ((*p >= ‘a‘ && *p <= ‘z‘) && (*q == ‘ ‘)) 32 { 33 reserverOneWord(r, p); // 反转 r到p这部分 34 35 while (*q == ‘ ‘) 36 ++q; 37 if (*q == ‘\0‘) // 为了处理" hello world "这种情况 38 return; 39 r = q; 40 p = q; 41 q++; 42 } 43 else 44 { 45 ++q; 46 ++p; 47 } 48 } 49 reserverOneWord(r, p); // 此时q指向 \0,需要反转r到p位置的字符串 50 } 51 52 int main() 53 { 54 // 测试用例 55 // char str[] = "where‘d go?"; 56 //char str[] = "hello world!"; 57 //char str[] = " hello world "; 58 char str[] = " "; 59 60 reserverString(str); 61 cout << str; 62 63 system("pause"); 64 return 0; 65 }
【形式3】:
题目:
(未完待续...)
原文地址:https://www.cnblogs.com/xuelisheng/p/10987249.html
时间: 2024-10-05 20:59:56