在解决问题过程中,经常碰到使用双指针解决的情况,使用双指针,可以很高效很快速的解决问题,罗列一下应用双指针的情况:
1,将给定的英文字符串进行反转,例如: I love programming。得到的结果是:.gnimmargorp evol I。下面给出核心代码:
#include<stdio.h>
#include<string.h>
void swap_string(char *p_start, char *p_end) {
char temp;
while(p_start <= p_end) {
temp = *p_start;
*p_start = *p_end;
*p_end = temp;
p_start++;
p_end--;
}
}
void main() {
char str[] = "I love programming.";
swap_string(str, str + strlen(str) - 1);
printf("%s\n", str);
}
2,给定一个字符串,例如:” test ** “,要求出去字母之外其他多余的字符,这也需要设定两个指针,一个慢指针和一个快指针,核心代码如下:
#include<stdio.h>
#include<string.h>
void trim_word(char *word) {
char *p_slow = word;
char *p_fast = word;
while(*p_fast) {
if(!(*p_fast >= 'a' && *p_fast <= 'z') && !(*p_fast >= 'A' && *p_fast <= 'Z')) {
p_fast++;
} else {
*p_slow++ = *p_fast++;
}
}
*p_slow = '\0';
}
void main() {
char word[] = " test ** ";
trim_word(word);
printf("%s\n", word);
}
如果给定的字符串是这样的:” test***ing “,这个算法也可以胜任的。
3,给定一个字符串,例如:”abccba”,判断它是否是回文。可以应用数组解决,但是数组的索引速度没有指针的移动速度快,所以设定两个指针,一个指向字符串开始,一个指向字符串结尾,同步移动。核心代码如下:
#include<stdio.h&g
版权声明:本文为zzran原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。