反转单词
将字符串进行如下反转: 如果字符串为 how are you
则反转为 you are how
也就是单词反转,但是每个单词内部不变。
两个解法,第一个是根据空格把每个单词弄出来,保存起来,然后反转就好了
第二种,先反转整个句子,之后,再对每个单词在进行一次反转。
代码如下:
#include <iostream> #include <string> #include <cassert> using namespace std; void reverseRange(char* str,int begin,int end) { assert(str != NULL); assert(begin>=0); assert(end<=strlen(str)-1); if(begin>=end) return; while(begin<=end) { char temp = str[begin]; str[begin] = str[end]; str[end] = temp; begin++; end--; } return; } void reverseString(char* str) { assert(str!=NULL); reverseRange(str,0,strlen(str)-1); //循环中begin = end+2,为了使循环保持一致,end从-2开始 int begin=0,end=-2; int i=0; for(i=0; i<strlen(str); i++) { // i指向空格,那么前一个单词的结尾为i-1 // 下一个单词的开头为i+1 if (str[i]==' ') { begin = end+2; end = i-1; reverseRange(str,begin,end); } } begin = end+2; end = strlen(str)-1; reverseRange(str,begin,end); return; } int main(int arrgc, char* argv[]) { char* p = "hello world !"; char* str = (char*)malloc(sizeof(char)*(strlen(p)+1)); strcpy(str,p); reverseString(str); cout<<str;
free(str); return 0; }