指针经典编程练习题 解题方法 + 完整代码
2026/4/23 18:35:19 网站建设 项目流程

1. 字符串逆序

题目:反转整个字符串方法:首尾双指针交换法

void Reverse(char* str) { int len = strlen(str); char* left = str; char* right = str + len - 1; while (left < right) { char temp = *left; *left = *right; *right = temp; left++; right--; } }

2. 字符串左旋 k 个字符

方法 1:暴力逐个移动

思路:每次把第一个字符移到末尾,循环 k 次

void leftReverse(char* str,int time) { int len = strlen(str); for (int i = 0; i < time; i++) { char temp = str[0]; for (int j = 0; j < len - 1; j++) { str[j] = str[j + 1]; } str[len-1] = temp; } }

方法 2:strcpy+strncat 库函数拼接

思路:后半段 + 前半段,拼接新字符串

void leftReverse(char* str, int time) { char temp[101] = { 0 }; strcpy(temp, str + time); strncat(temp, str, time); strcpy(str, temp); }

完整全过程图解

原 str:a b c d e f \0time=2

  1. strcpy(temp, str+2);temp:c d e f \0

  2. strncat(temp, str, 2);temp:c d e f a b \0

  3. strcpy(str, temp);从头覆盖 strstr 旧内容 abcdef → 被彻底替换成 cdefab


超级重点一句话

strcpy 是覆盖拷贝,不是追加!旧字符串直接消失,完全被新内容替换

3. 数组奇数在前,偶数在后

题目:调整数组顺序,所有奇数放前面,偶数放后面方法:左右双指针碰撞法

void Change(int arr[],int len) { int left = 0; int right = len - 1; while (left < right) { //左边找偶数 while (left < right && arr[left] % 2 != 0) left++; //右边找奇数 while (left < right && arr[right] % 2 == 0) right--; //交换 int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询