2017-11-18 6 views
-1

私が入力した文字列が回文かどうかを調べるプログラムを書いています im using c、not C++ これを行う関数を書いたので、入力された文字列はdataという配列に入れられます。主な機能。c配列の比較に問題があります

int palindroom(char data) { 
length = sizeof(data); //getting the length of the word 
for (i = 0; i < length; i++){ 
    j = length-1-i; //inverting the string 
    resstr[i] = data[j]; // 
} 
if (data = resstr) 
    return (1); //returning result 
else return (0); } 

イムは、Visual Studioでc2109とE0142のエラーを取得しかし、私は本当に何イムdoeing誤解いけません。

+0

'data'は、単一の' char'なので、 'データ[j]は'いずれかを行うことはありませんセンス。 'resstr'とは何ですか? – UnholySheep

+0

また、 'data'を' char * 'に変更すると仮定すると、 'sizeof(data)'は配列のサイズを返さず、 'data = resstr'は代入です。比較(それはあなたが '=='とにかく '=='を使って内容 'char'配列を比較することはできません) – UnholySheep

+0

データは配列なので配列を忘れています。 –

答えて

1
  • あなたは言葉を文字に合格していない(私はちょうどので、Cに新しいビットイム学校でCを学び始めたことを知ってもいいかもしれません)。あなたは単語を渡すために文字配列を渡す必要があります。

  • ヌル終了文字列の長さを知るには、strlen()関数を使用します。

  • 文字列を反転するには、strrevを使用できますが、文字列がパリンドロームかどうかを簡単に知ることができます。

  • data = resstrは、比較しない割り当てです。そして、たとえそれが==だったとしても、比較はあなたが望むことをしません。ストライグを比較するには、strcmp()を使用する必要があります。

あなたが何をしたいのかの簡単なバージョン: -


int pal(char *s) 
{ 
    size_t len = strlen(s); 
    char *rs = s + len - 1; 
    while (s < rs){ 
     if (*rs != *s) 
      return 0; 
     s++; 
     rs--; 
    } 
    return 1; 
} 

ロジックは、文字列がdbackwardを転送同じ読みパリンドロームの場合です。

たとえば、

ABCBAとその逆は同じです。あなたのchar配列を渡すに関するビットを支援するために

ABCDA 
| | 
s rs <-- same 

ABCDA 
| | 
s rs <-- not same // return 0 

- :私たちがやっていることは、チェックは次のようにsomethignだろうnonpalindromeについては

ABCBA 
| | 
s rs <--- same 

ABCBA 
| | 
s rs <--- same 

です。

は、あなたがこのような文字列を読んでいるとします -

char s[50]; // you will check 49 letter words atmost; 

scanf("%49s", s); 

if(pal(s)){ 
    puts("found a palindrome"); 
} 
else { 
    puts("Non-palindrome"); 
} 
0

あなたのコードに問題のシリーズがあります。単一の文字を見込んでいますが、それにcharへのポインタを渡す

int palindroom(char data) 

ここデータ。

length = sizeof(data); 

必要な機能はsizeof()ではなくstrlen()です。

if (data = resstr) 

ここで、最初に '='は代入演算子であり、比較のための演算子は '=='です。しかし、 '=='は文字列に対しても機能しません。そのためにはstrcmp()が必要です。

参考:

https://www.tutorialspoint.com/c_standard_library/c_function_strcmp.htm https://www.tutorialspoint.com/c_standard_library/c_function_strlen.htm

コード

int palindroom(char * data) { 
    length = strlen(data); //getting the length of the word 
    for (i = 0; i < length; i++){ 
     j = length-1-i; //inverting the string 
     resstr[i] = data[j]; // 
    } 
    if (strcmp(resstr, data) == 0) 
     return (1); //returning result 
    else return (0); 
} 
関連する問題