天天看点

【经典算法实现 5】部分字符串反转实现(循环)

【经典算法实现 5】部分字符串反转实现

    • 一、循环实现部分字符串反转

本文主要的目的是实现部分字符串的反转,

例如:

"helloabchelloabc"

, 将其中的所有的

abc

字串进行反转,其正确结果应该为

"hellocbachellocba"

#include <stdio.h>

void __reverse_str(char *start,char *end){
	int len = end - start + 1;
	char *p_s = start,  *p_e=end, temp[1];
	
	while(p_e - p_s > 0){
		*temp = *p_s;
		*p_s = *p_e;
		*p_e = *temp;
		p_s++;
		p_e--;
	}
}

void reverse_str(char *str, char *s){
	char *p_str=str, *p_s=s, *start=NULL, *end=NULL; 
	
	printf("\n转换------:%s \n", str);
	// 找到 字串 s 在 str 中的所有位置
	while( *p_str != '\0' ){
		if( *p_str == *p_s ){
			
			// 记录初始位置 
			start = start == NULL? p_str : start; 
			
			p_s++;
			if( *p_s == '\0'){
				end = p_str; 
				
				// 开始转换
				__reverse_str(start, end);
				
				printf("\n转换后:%s \n", str);
				
				// 转换完毕后,清空信息,继续下一轮查找
				p_s = s;	// 更新目标字符串指针 
				start = NULL;
				end = NULL;
			}
		}else{
			p_s = s;
			start = NULL;
			end = NULL;
		}
		p_str++;
	}
	printf("\n转换------:%s \n", str);
} 

int main(void){
	
	char str[] = "helloabchelloabc-abc";
	
	reverse_str(str, "abc");
	
	return 0;
} 
           
转换------:helloabchelloabc-abc

转换前:helloabchelloabc-abc
转换后:hellocbahelloabc-abc

转换前:hellocbahelloabc-abc
转换后:hellocbahellocba-abc

转换前:hellocbahellocba-abc
转换后:hellocbahellocba-cba

转换------:hellocbahellocba-cba

请按任意键继续. . .
           

继续阅读