句子翻转
i am superman ---> superman am i
这个题目比较简单:
思路:
(1)首先将原字符串分开成单词,然后将单词在反过来组成反的字符串;
函数如下:
#include "stdafx.h"
#include "stdlib.h"
#include <string>
#include <list>
using namespace std;
bool InverseString(const std::string StrSrc,std::string &StrDsc)
{
list<string> SubString;
list<string>::iterator iter;
int ibegin=0,iend=0;
//如果为NULL
if (StrSrc.empty())
{
return false;
}
//分别取出每一个子单词字符串
for (unsigned int i=0;i<StrSrc.size();i++)
{
//是空格
if (StrSrc[i]==0x20)
{
iend=i;
}
//是一个合法的子字符串
if ((iend-ibegin)>0)
{
std::string TmpStr=StrSrc.substr(ibegin,iend-ibegin);
SubString.push_front(TmpStr);
ibegin=i;
}
}
//最后一个单词串
std::string TmpStr=StrSrc.substr(ibegin);
SubString.push_front(TmpStr);
for(iter=SubString.begin();iter!=SubString.end();iter++)
{
StrDsc.append(*iter);
//补上空格
StrDsc.append(" ");
}
return true;
}
int main(void)
{
string StrSrc="i am superman";
std::string StrDesc="";
InverseString(StrSrc,StrDesc);
printf("desc string is:%s\n",StrDesc.c_str());
}
以上是我的解法,如果大家有更好的算法,也麻烦告诉我,呵呵!我写的这个函数没有考虑原字符串中有多个空格隔开的情况!