指针经典编程练习题 解题方法 + 完整代码
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
strcpy(temp, str+2);temp:c d e f \0strncat(temp, str, 2);temp:c d e f a b \0strcpy(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; } }