句子翻转 如i am superman ---> superman am i

14 篇文章 0 订阅
4 篇文章 0 订阅

 句子翻转

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);  
	   }  
		
	}
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值