2011-08-29 93 views
-2

我想以特定格式反轉字符串。例如,"My name is Nishant"應轉換爲"Nishant is name My"反轉C中字符串的位置

+1

到目前爲止你有什麼? – Codo

+2

Dup of [Reversing words in a sentence](http://stackoverflow.com/questions/3276582/reversing-words-in-a-sentence),[c反轉一個句子的程序](http://stackoverflow.com/questions/4705069/c-program-on-reversing-a-sentence) – outis

+2

你有什麼特別的...哦,對,皮埃爾說科多是什麼。 – slezica

回答

1

如果你有一個char[] words排列你的話那麼它就是一個簡單的循環:

for (i = 0; i < mid; i++) 
    exchange(words[i], words[number_of_words - i]); 

midnumber_of_wordsexchange理智的定義。

如果您擁有的是包含整個聲明的大字符,則首先執行strtok會很有幫助。然後,使用上面的循環。

+0

嗨... Mihai居然應該在C中完成,而不使用C lib函數 – Nishant

+0

在此先感謝 – Nishant

+0

這個想法是一樣的。 –

0

向您的導師表達您的問候。如果這是一項家庭作業,您應該自己編寫代碼。

這裏有一點提示,雖然:使用char指針遍歷數組中的每個字符,直到您在最後點擊NUL終止符。現在反向迭代,直到你遇到一個空間。將你的位置保存在另一個指針中,向前移動一個,然後將每個字符複製到輸出緩衝區,但不包括NUL。

現在檢索那個你保存你的位置的其他指針中最後一個空間的位置,然後再次備份。當你向前移動時,當遇到NULL - ASCII'\ 0'或零字節的空間時,實際上需要停止 - 而不僅僅是NUL。

如果您在開始時迭代前進時將某些列表中的每個空格的位置保存起來,那會更快一些。這樣,您就不需要在整個字符串上向後迭代,並且每個單詞都有很短的迭代次數。代碼會更復雜一點。

對於像個人英語句子這樣的短字符串,提高的效率並不重要,但是您將很多正在讀取的大文件反轉到內存中。