2010-11-21 13 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; 
} 

現在、文字列の長さを検出し、その半分が表示されます。これはちょうど私がそれがすべきだと思うように働いていることを確認することです。関数の残りの部分(可能であれば)は、 "halflength"から整数をとり、その量を文字列の先頭と末尾から取り出し、それらを別々の文字列に格納するために使用します。そこから、私はそれらの文字を比較し、その文字列が実際に回文であれば真または偽を返すことができるだろう。

TL; DR - 特定の文字数(この場合は整数「半分長さ」)を文字列の先頭と末尾から取り除き、別々の変数に格納することは可能ですか?私がしようとしていることの詳細については上記を読んでください。

P.S. - gets()を使わないことを知っていますが、fgets()の\ nを切り捨てる関数を書く気がしませんでした。

+3

回文を検出するために文字列の別のコピーは必要ありません。ヒント:ポインタを使って文字列の文字を繰り返し、前方と後方の両方を繰り返すことができます。 –

+0

なぜ文字列の最初から途中まで繰り返すのが古典的なやり方で、終わりからの対応する文字と比較するのはなぜですか? –

+0

ありがとう、そのやり方を考えなかった。ちょうど楽しみのためにそれをやりたいと思っていました。そして、私が上記で始めたのは私の最初の考えでした。 – austinprete

答えて

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

私は間違った問題に近づいていました。どのように私はこれを行う必要があります前後の両方のポインタを使用して文字を繰り返している。元の質問にまだ答えたいのであれば、ある時点でまだ役立つかもしれませんが。あなたはこのような何か、

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

//をすれば、両方が同じであれば、それは実際には回文で何

1

。 )

+0

-1 str1とstr2はcharでなければなりません。strrevはC標準ではありません – user411313

+0

なぜ彼自身のstrrev()の1つを作成しませんか?私は決してstring.hを使用すると言った) –

+0

提案ありがとう。私のチャンスが自分のものになっているかどうかは分からない。ちょうどCの専門家ではなく、Cプログラミングの1週間のようにかなり新しい。 – austinprete