我需要使用一些循環功能,扭轉串用C
我有這樣的代碼:函數返回字符串逆轉用C
char *reverse(char *t)
{
int length = strlen(t);
for(int i= (length-1);i>=0;i--)
t[i]=t[i];
return t;
}
這是爲什麼不工作?
我需要使用一些循環功能,扭轉串用C
我有這樣的代碼:函數返回字符串逆轉用C
char *reverse(char *t)
{
int length = strlen(t);
for(int i= (length-1);i>=0;i--)
t[i]=t[i];
return t;
}
這是爲什麼不工作?
你的代碼將永遠不會起作用,因爲
t[i]=t[i];
實際上什麼都不做。
因爲這更像是一個家庭作業類型的問題,我相信如果你自己完成它會對你更好 – Krishnabhadra 2013-03-05 11:53:41
如果你是代碼,那麼值得一提的是代碼中的其他錯誤(經常循環兩次)試圖提供提示以使OP能夠解決這個問題。 – simonc 2013-03-05 11:56:52
@simonc Ya我也想過這件事(我知道那是在你刪除的答案中),但我更好地知道什麼是他在循環內的陳述語句,然後評論循環迭代。現在問題出現了,任何類型的循環迭代都不起作用.. :-) – Krishnabhadra 2013-03-05 12:00:10
它不起作用,因爲t[i] = t[i]
是一種重言式。你可能需要一個額外的櫃檯,並完成類似
char temp = t[j];
t[j] = t[i];
t[i] = temp;
如果一個櫃檯去從0
到length/2
和其他雲從length-1
到length/2
。
不應該在'strlen(t)/ 2'處停止計數器嗎?否則,您將在迭代的前半部分中反轉字符串,然後再次將其反轉,恢復原始內容,在第二組 – simonc 2013-03-05 11:52:23
@simonc右側。我正在編輯提到這一點。 – 2013-03-05 11:55:29
常規的做法是交換兩個數組..我在學校練吧:)希望它可以幫助
int length = strlen(t);
/*declare a new array t2*/
for(int i= 0;i<=length-1;i++)
t2[i]=t[length -1];
return t2;
這將是一個編譯器錯誤..什麼是'strlen-1'中的strlen' – Krishnabhadra 2013-03-05 11:51:30
@Krishnabhadra,原諒,有一個錯字..我現在糾正它.. – 2013-03-05 11:51:31
好的..刪除downvote。 。 – Krishnabhadra 2013-03-05 11:52:07
這應該工作:
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;
}
縮短循環次數的一半不是嗎? – 2013-03-05 11:57:31
是的。但有趣的是,複雜性仍然是O(n)! – 2013-03-05 11:59:50
true :) [15個字符] – 2013-03-05 12:02:19
定義「不工作」。你進行了哪些調試? – 2013-03-05 12:13:24