2010-09-23 69 views
-1

我需要將諸如「我的名字是thomos」的字符串轉換爲「ym eman si somoht」。爲了做到這一點,我需要知道什麼?如何反轉單詞?

回答

-2

使用函數strtok分割成詞 對於每一個字,扭轉串並追加到輸出,具有空間一起

+7

問題是標記'[C++]'。有比strtok更好的解決方案。 – 2010-09-23 09:56:49

5

一種可能性是使用std::copy與一對std::reverse_iterator S,你可以得到與rbeginrend

除此之外,你可能會想使用類似於std::istringstream的東西來將字符串分解爲單詞進行處理。

1

我不會提供代碼,因爲這味道太像功課。但我會盡力讓你朝正確的方向發展。

您首先必須將該句子切成單詞。您可以通過使用operator>>(std::istream&,std::string&)將它從流中讀取(字符串流將在如果您恰好將其放在字符串中),將其讀入字符串中。

然後,你必須扭轉個別字符串。您可以使用C++標準庫中的std::reverse()
然後你所要做的就是把這些單詞寫到輸出流中,並在它們之間放置空格。

或者,您可以輸出字符串反轉,如傑裏建議。

+0

我想這是毫無疑問的,我可以知道爲什麼這是低票? – sbi 2010-09-24 18:41:45

0

如果你從C風格的字符串的角度來看這件事(因爲我不得不第一次爲作業做這個問題),你可能想嘗試一些指針。這是我經歷的基本操作順序。如果你正在使用std :: string我很確定這不會工作,但它可能。這真的意味着c風格的字符串和教人們使用指針。

創建2個指針和一個臨時交換字符。

增加第二個指針,直到它引用空終止字符。迅速將其刪除一個。

將第一個指針與第二個指針引用的內容進行交換,直到指針遇到或通過。

0
public static void main(String[] args) { 

    StringBuffer buffer=new StringBuffer(); 
    buffer.append("my name is thomos"); 
    buffer.reverse(); 
    String str=buffer.toString(); 
    String arr[]=str.split(" "); 
    int length=arr.length; 
    for(int i=length-1;i>=0;i--) 
    { 
     System.out.print(arr[i]+" "); 
    } 


} 

這裏我們使用字符串緩衝區和字符串 因爲字符串函數不支持反轉功能 也斯汀緩衝犯規支持分割功能這就是爲什麼我們正在採取的字符串值。

邏輯是 第一扭轉整個字符串 那麼我們將得到

「somoht SI埃曼YM」

那麼我們將使用空間拆分此字符串,所以我們會得到個別串

接下來我們只是想從數組的末尾進行迭代,並將其打印出來或將其存儲在一個新的數組中 我們將得到輸出爲

「YM EMAN SI somoht」