句子翻转
i am superman ---> superman am i
这个题目比较简单:
思路:
(1)首先将原字符串分开成单词,然后将单词在反过来组成反的字符串;
C++ 实现如下:
函数如下:
#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());
}
以上是我的解法,如果大家有更好的算法,也麻烦告诉我,呵呵!我写的这个函数没有考虑原字符串中有多个空格隔开的情况!
Java 编程实现如下:
package stringReverse;
import java.util.ArrayList;
//import java.util.List;
public class stringReverse {
public stringReverse(){}
public String InverseString(String StrSrc)
{
ArrayList<String> al=new ArrayList<String>();
String strDesc="";
if(StrSrc.length()==0)
{
return "";
}
String s1[] = StrSrc.split(" ");
for(int i=0;i<s1.length;i++)
{
al.add(0,s1[i]);
}
//
for(int i=0;i<al.size();i++)
{
//
strDesc=strDesc+al.get(i);
strDesc+=" ";
}
strDesc.trim();
return strDesc;
}
}
调用的地方:
package stringReverse;
public class TestStringReverse
{
public static void main(String[] args)
{
String StrSrc="i am superman";
String StrDesc="";
stringReverse strReverse=new stringReverse();
StrDesc=strReverse.InverseString(StrSrc);
if(StrDesc!="")
{
System.out.println(StrDesc);
}
}
}
参考资料:
http://www.cnblogs.com/springcsc/archive/2009/12/03/1616326.html
3)
import java.util.LinkedList;
import java.lang.String;
public class InverseString
{
public String StringInverse(String strSrc)
{
String strResult="";
LinkedList<String> lList = new LinkedList<String>();
if(strSrc.length()==0)
{
return strResult;
}
//根据空格拆分字符串
String s1[] = strSrc.split(" ");
for(int i=0;i<s1.length;i++)
{
lList.add(0,s1[i]);
}
//
for(int i=0;i<lList.size();i++)
{
//
strResult=strResult+lList.get(i);
strResult+=" ";
}
strResult.trim();
return strResult;
}
public static void main(String []args)
{
String strSrc="I am superman";
String strDst;
InverseString strReverse=new InverseString();
strDst=strReverse.StringInverse(strSrc);
if(strDst!="")
{
System.out.println(strDst);
}
}
}