标签:
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。对字符串的操作,主要问题:一定要注意字符串为NULL和访问越界的情况!再就是找‘\0‘.
例如输入字符串;"I love you.",经过翻转就变成:"you. love I"。看出来了吗,故意的,(不论语法)呵呵!
方案一:两次翻转法。两次翻转法就是先对整个字符串进行翻转:".uoy evol I";第二次再翻转对句子中的单个单词进行翻转:"you. love I"。这样就成功了!该方案的关键点在于实现一个字符串的翻转。#include <iostream> using namespace std; char strr[]="Jenny, I love you."; void Reverse(char *pBegin,char *pEnd) { if(NULL==pBegin || NULL==pEnd) return; while(pBegin<pEnd) { char temp=*pEnd; *pEnd=*pBegin; *pBegin=temp; pBegin++; pEnd--; } } char * ReverseSentence(char *str) { if(NULL==str) return NULL; char *pBegin=str; char *pEnd=str; while(*pEnd!='\0') pEnd++; pEnd--; //第一步:先翻转整个句子; Reverse(pBegin,pEnd); //第二步:再翻转句子中的每个单词; pBegin=pEnd=str; while(*pBegin!='\0') { if(*pBegin==' ') { pBegin++; pEnd++; } else if(*pEnd==' ' || *pEnd=='\0') { Reverse(pBegin,--pEnd); pBegin=++pEnd; } else pEnd++; } return str; } int main() { char *pp=NULL; cout<<"未翻转前:"<<strr<<endl; pp=ReverseSentence(strr); cout<<"翻转后:"<<pp<<endl; system("pause"); return 0; }
运行结果:
标签:
原文地址:http://blog.csdn.net/gogokongyin/article/details/51712811