2010-11-21 114 views
0

我一直試圖在C中編寫一個檢測後記的函數。該方案目前看起來如下:將C中的字符串拆分爲不同的部分

#include <stdio.h> 
#include <string.h> 

int main() 
{ 
    char palindrome[24]; int palength; int halflength; 
    gets(palindrome); 
    palength = strlen(palindrome); 
    halflength = palength/2; 
    printf("That string is %u characters long.\r\n", palength); 
    printf("Half of that is %u.\r\n", halflength); 
    return 0; 
} 

現在它檢測到字符串的長度,同時也顯示了一半的即是。這只是爲了確保它正在工作,我認爲它應該是。該函數的其餘部分應該做些什麼(如果可能的話)是從「半長」中取出整數,並使用它從字符串的開頭和結尾取出該字符數量並將它們存儲在單獨的字符串中。從那裏我可以比較那些字符,並且如果字符串確實是迴文,那麼能夠返回真或假。

TL; DR - 是否有可能在字符串的前端和末尾放置一定數量的字符(在本例中爲整數「halflength」),並將它們存儲在單獨的變量中。請閱讀以上,瞭解我正在嘗試做什麼的更多信息。

P.S. - 我知道不要使用gets(),但不想寫一個函數來截斷fgets()的關閉。

+3

您不需要單獨的字符串副本來檢測迴文。提示:使用指針遍歷字符串的字符,並且可以向前和向後迭代。 – 2010-11-21 06:22:19

+0

爲什麼不這樣做的經典方式,即從字符串的開頭迭代到中間點,與最後的相應字符進行比較? – 2010-11-21 06:22:20

+0

謝謝你,沒有想到這樣做的事情。只是想爲了好玩而做,而我上面開始的是我的第一個想法。 – austinprete 2010-11-21 06:26:19

回答

4
int len = strlen(palindrome) - 1; // assuming no \n 
int half = len << 1; 
for (int i=0; i<=half; ++i) 
    if(palindrome[i] != palindrome[len-i]) 
    return false; 
return true; 
0

發現我正在接近錯誤的問題。我應該如何做到這一點是使用指針向後和向前迭代字符。儘管如果你仍然想回答最初的問題,它在某些時候仍然有用。

1

如果你做這樣的事情,

char *str1="lol",*str2; 
str2=strrev(str1); 

//如果兩者相同則它實際上是一個迴文; )

+0

-1 str1和str2必須是char *不是char,strrev不是C標準 – user411313 2010-11-21 08:15:00

+0

爲什麼不做一個他自己的strrev()?我從來沒有說過使用string.h;) – 2010-11-21 19:13:19

+0

感謝您的建議。不知道我做自己的機會是多少,哈哈。並不完全是C專家,非常新,就像在C編程的一週中一樣。 – austinprete 2010-11-23 04:31:27