2013-03-05 22 views
-2

我需要使用一些循環功能,扭轉串用C
我有這樣的代碼:函數返回字符串逆轉用C

char *reverse(char *t) 
{ 
    int length = strlen(t); 
    for(int i= (length-1);i>=0;i--) 
     t[i]=t[i]; 
    return t; 
} 

這是爲什麼不工作?

+0

定義「不工作」。你進行了哪些調試? – 2013-03-05 12:13:24

回答

7

你的代碼將永遠不會起作用,因爲

t[i]=t[i]; 

實際上什麼都不做。

+0

因爲這更像是一個家庭作業類型的問題,我相信如果你自己完成它會對你更好 – Krishnabhadra 2013-03-05 11:53:41

+1

如果你是代碼,那麼值得一提的是代碼中的其他錯誤(經常循環兩次)試圖提供提示以使OP能夠解決這個問題。 – simonc 2013-03-05 11:56:52

+0

@simonc Ya我也想過這件事(我知道那是在你刪除的答案中),但我更好地知道什麼是他在循環內的陳述語句,然後評論循環迭代。現在問題出現了,任何類型的循環迭代都不起作用.. :-) – Krishnabhadra 2013-03-05 12:00:10

5

它不起作用,因爲t[i] = t[i]是一種重言式。你可能需要一個額外的櫃檯,並完成類似

char temp = t[j]; 
t[j] = t[i]; 
t[i] = temp; 

如果一個櫃檯去從0length/2和其他雲從length-1length/2

+1

不應該在'strlen(t)/ 2'處停止計數器嗎?否則,您將在迭代的前半部分中反轉字符串,然後再次將其反轉,恢復原始內容,在第二組 – simonc 2013-03-05 11:52:23

+0

@simonc右側。我正在編輯提到這一點。 – 2013-03-05 11:55:29

3

常規的做法是交換兩個數組..我在學校練吧:)希望它可以幫助

int length = strlen(t); 
    /*declare a new array t2*/ 
    for(int i= 0;i<=length-1;i++) 
     t2[i]=t[length -1]; 
    return t2; 
+0

這將是一個編譯器錯誤..什麼是'strlen-1'中的strlen' – Krishnabhadra 2013-03-05 11:51:30

+0

@Krishnabhadra,原諒,有一個錯字..我現在糾正它.. – 2013-03-05 11:51:31

+0

好的..刪除downvote。 。 – Krishnabhadra 2013-03-05 11:52:07

2

這應該工作:

int right = strlen(s); 
int middle = end/2; 
--right; 

for (int left = 0; left <= middle; ++left, --right) 
{ 
    char t = s[left]; 
    s[left] = s[right]; 
    s[right] = t; 
} 
+0

縮短循環次數的一半不是嗎? – 2013-03-05 11:57:31

+0

是的。但有趣的是,複雜性仍然是O(n)! – 2013-03-05 11:59:50

+0

true :) [15個字符] – 2013-03-05 12:02:19