【申明:本文仅限于自我归纳总结和相互交流,有纰漏还望各位指出。 联系邮箱:Mr_chenping@163.com】
题目:
函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量。
题目分析:
1、需要保持非'*'字符的顺序
2、不开辟额外的空间
3、用快慢指针,指向字符串尾巴,快指针指向非‘*’字符串,慢指针指向'*',然后交换指针内容即可
算法实现:
#include <stdio.h>
#include <string.h>
int str_move_char_to_head(char *str, char move_char)
{
int len = strlen(str);
char *fast = str + len - 1;
char *slow = fast;
char temp;
while(len--)
{
if(*slow != move_char)
{
slow--;
fast = slow;
continue;
}
if(*fast == move_char)
{
fast--;
continue;
}
{
temp = *fast;
*fast-- = *slow;
*slow-- = temp;
}
}
}
int main(int argc, char *argv[])
{
printf("%s----->", argv[1]);
str_move_char_to_head(argv[1], '*');
printf("%s\n", argv[1]);
}