2017-07-20 1 views
-3

まずは、あなたが提供したいと思っているすべてのサポートに感謝します。私はC++を初めて使っていて、このウェブサイトだけでなく、私の問題の解決のための他のリソースも精練しています。ユーザの入力がC++で回文であるかどうかを確認

さらに、これは確かに宿題の一部でした。ただし、割り当てがオンになっています(このコードを有効にしないとうんざりします)。私の特定のコードの問題点と、問題に近づく別の方法で書き直されたコードではなく、現在のコードを修正する方法を説明することは素晴らしいことです。私は確かにこの素晴らしいサイトでこの問題を解決する方法をたくさん見つけました!

私のコードではエラーは発生しませんが、反転出力には反転文字配列が表示されません。これは、常に「あなたの文字列が回文ではありません!:(」示さないに関係なく入力が何であるかを、ここで私の小さなプログラムになります。

再び
#include <iostream> 
#include <string> 

using namespace std; 

int isPalindrome(char *input, char *input2); 
char reverseString(char *input); 

int main() 
{ 
    char input[50]; 
    char input2[50]; 

    cout << "Please enter a string of characters no larger than 50." << endl; 
    cin.getline(input, 50); 
    reverseString(input); 
    cout << "The reversed string is " << input2 << endl; 
    int result; 
    result = isPalindrome(input, input2); 

    if(result == 0) 
      cout << "Your string is a palindrome!" << endl; 
    else 
      cout << "Your string is not a palindrome! :(" << endl; 
return 0; 
} 

int isPalindrome(char* first, char* second) 
{ 
    if (*first == *second) 
      return 0; 
    else 
      return 1; 
} 

char reverseString(char* input2) 
{ 
    int size = sizeof(input2); 
    for (int i = 0; i < (size/2); i ++) 
      swap(input2[i], input2[size-i-1]); 

return *input2; 
} 

、私はこれがある場合、私は謝罪!あなたが提供することができます任意の助けに感謝します。。私が見渡せるていますし、他の場所で見つけることができたはずです

+1

デバッガでコードをステップ実行したとき、あなたは何を観察しましたか? – user0042

+0

'* first == * second'では、' first'の最初の文字と 'second'の最初の文字を比較します。その式は 'first [0] == second [0]'に等しい。 –

+2

さらに、 'sizeof'をポインタに置くとポインタのサイズが決まります。デバッガの迅速なステップスルーにより、そのことが非常に迅速に伝えられました。デバッガを使用してコードを1行ずつ進んで、このようなことを調べる方法を学びましょう。 –

答えて

0

回文の確認は、この多くの努力を取らないあなたのreverseString機能で

bool isPalindrome(const char* s) // this function is self-contained. 
{         // the caller does not need to provide 
    size_t n = strlen(s);   // any pre-computed value. 
    if (n == 0) 
     return false; 

    const char* e = s + n - 1; 
    while (s < e) 
     if (*s++ != *e--) 
      return false; 
    return true; 
} 

int main() 
{ 
    char input[50]; 

    cout << "Please enter a string of characters no larger than 50." << endl; 
    cin.getline(input, 50); 

    bool result = isPalindrome(input); 

    cout << "Your string is" 
     << ((result) ? " " : " not ") 
     << "a palindrome!\n"; 

    return (result) ? 1 : 0; 
} 

簡単なエラー:

char reverseString(char* input2) 
{ 
    int size = sizeof(input2);     // <-- ?? sizeof(char*) != strlen(input2) 
    size_t size = strlen(input2);    // <-- should read. 

    for (int i = 0; i < (size/2); i ++) 
      swap(input2[i], input2[size-i-1]); 

    return *input2;       // what's this? returning first char? why? 
} 
+0

ありがとうございました。あなたが提供したコードを理解し、それをよりよく理解しようと思います。私は今、ポインタを渡すことが機能していないのを見る。遅くとも最後の夜....そうではありません!私はまだ関数に 'char input2'を渡して、' char * input2'を渡してみるたびにエラーが出る理由を調べる必要があります。 –

+0

かなりシンプルです。 tbothの終わりから文字列を歩き、差異があるときは比較する - 回文でないとき - または2つのポインタが交差するとき - 回文。 IsPalindrome関数は最初と最後のバイトだけを比較します。 –

関連する問題