第五章 字串專題 ---------------- 5.8 題解:將字串中按單詞翻轉

Curtis_發表於2019-03-19

題目:

翻轉單詞。將字串按單詞翻轉,如here you are 翻轉成are you here

一、利用strtok(字元陣列分割函式),和reverse函式:

1、C++程式碼:

#include<iostream>
#include<algorithm>
#include <cstring>
using namespace std;

string wordReverse(string src)
{
	string ans;
	
	//temp:用於臨時存放分割後的結果
	//tempStr:為使用reverse函式,將char指標引導的字元陣列,轉化為字串 
	char* temp;
	string tempStr;
	
	//為使用strtok函式,建立src對應的字元陣列 
	char srcC[src.length()];
	
	//翻轉src字串後,存入字元陣列srcC 
	reverse(src.begin(),src.end());
	strcpy(srcC,src.data());
	
	//分割依據 
	const char* basis=" ";
		
	//初次分割 
	temp=strtok(srcC,basis);
	
	while(temp)
	{
		//進行逐個翻轉 
		tempStr=temp;
		reverse(tempStr.begin(),tempStr.end());
		
		//賦值給最後的結果 
		ans=ans+tempStr+" ";
		temp=strtok(NULL,basis);
	} 
	
	return ans;
}

int main()
{
	string str="here you are";
	cout<<wordReverse(str);
	return 0;
}

2、結果:

 

二、JAVA程式碼:

public class WordReverse {

    public static void main(String[] args) {
        System.out.println(reverse("where you are"));
    }
    
    // 首先將整個字串按照字元翻轉,再找到每個單詞,將單詞翻轉
    static String reverse(String src){
        String s1 = reverseString(src);
        // 切割單詞
        String[]words = s1.split("\\s");
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < words.length; i++) {
            sb.append(reverseString(words[i])+ " ");
        }
        return sb.deleteCharAt(sb.length()-1).toString();
    }
    public static String reverseString(String iniString){
//        StringBuilder sBuilder = new StringBuilder(iniString)  // 和StringBuffer效果差不多。 
        StringBuffer sBuffer = new StringBuffer(iniString);
        return sBuffer.reverse().toString();
    }

}

參考:https://www.cnblogs.com/xiaoyh/p/10304381.html 

 

相關文章