标签:
一、算法描述
给定一个字符串,对于字符串包括多个连续空格的情况,压缩并只保留一个空格,同时以空格隔离的子串逆转。
二、算法思路
其本质是字符串逆转的变体,即在字符串逆转的基础上,还要压缩多余空格,这种情况相比单纯的字符串逆转多了一步判断连续空格的条件
如下代码中,包括单纯的字符串逆转函数,实现比较简单,主要是注意下标的位置
三、算法代码
#include <iostream> #include <string.h> #include <stdio.h> #include <stdlib.h> using namespace std; //字符串逆转 void ReverseWord(char *s,int left,int right) { while(left<right) { char ch=s[left]; s[left++]=s[right]; s[right--]=ch; } } //句子中每个字符串逆转 void ReverseSentence(char *str) { int i=0,j=0; while(str[j]!=‘\0‘) { if(str[j]==‘ ‘) { ReverseWord(str,i,j-1); j++; i=j; } else j++; } ReverseWord(str,i,j-1); } //句子中每个字符串逆转并压缩多余空格,字符串间只保留一个空格 void Remove_Space_and_Reverse(char *str,char *tstr) { int i=0,j=0,k=0; while(str[j]!=‘\0‘) { if(str[j]==‘ ‘) { tstr[k]=‘ ‘; ReverseWord(tstr,i,k-1); while(str[j]==‘ ‘) j++; k++; i=k; } else{ tstr[k++]=str[j++]; } } //逆转最后一个字符串 ReverseWord(tstr,i,k-1); } int main() { char s[256]="abcef hijklm nop"; char *tstr=new char[256]; memset(tstr,0,sizeof(char)*256); Remove_Space_and_Reverse(s,tstr); cout<<tstr<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/ballwql/p/4941174.html