2017-07-20 17 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'会给你*指针*的大小,而不是它指向的大小。调试器中的快速切换会很快告诉你。请学习如何使用调试器逐行浏览您的代码以找出类似的事情。 –

回答

0

检查回文并不需要这么多的努力

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; 
} 

在你reverseString功能:

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

这很简单。从两端走过绳子,比较并退出,当有差异时 - 不是回文 - 或者两个指针交叉 - 回文。您的IsPalindrome函数仅比较第一个字节和最后一个字节。 –