2016-03-02 69 views
-2

此代码尝试测试字符串是否是回文。它读取一串字符,将每个字符读入堆栈并同时将其添加到队列中。然后,它使用基本的堆栈和队列操作来确定字符串是否是回文。错误:在回文程序中从'char'无效转换为'const char *'

该方案与上述错误(S),当它击中炸毁:

inStack.push(inString[i]); 
inQueue.push(inString[i]); 

,我不明白为什么,或如何解决它。我已经完成了对这个错误的研究,因为它适用于我的案件并没有取得丰硕的成果。我对C++相当陌生,所以如果我忽略了一些愚蠢的行为,请原谅我。

的代码如下:

#include <iostream> 
#include <stack> 
#include <queue> 
#include <string> 

using namespace std; 

int main() 
{ 
    stack <string> inStack; 
    queue <string> inQueue; 
    string inString; //user input 
    int inLength; //loop counter variable 
    bool isPalindrome(false); 

    cout<<"Enter a word to see if it is a palindrome: "; 
    cin>>inString; 

    if (inString.size() > 0) 
    { 
     for (int i = 0; i <= inLength; i++) 
     { 
      inStack.push(inString[i]); //put string chars onto stack 
      inQueue.push(inString[i]); //add string chars to queue 
     } 

     isPalindrome = true; 

     while (isPalindrome && (!inStack.empty()) && (!inQueue.empty())) 
     { 
      if (inStack.top() != inQueue.front()) 
      { 
       isPalindrome = false; 
      } 
      else 
      { 
       inStack.pop(); 
       inQueue.pop(); 
      } 
     } 
    } 

    if(isPalindrome == false) 
    { 
     cout<<"It is not a palindrome."<<endl; 
    } 
    else 
    { 
     cout<<"It is indeed a palindrome."<<endl; 
    } 

return 0; 
} 
+0

inString [i]是一个字符,而不是一个字符串。如果你想要这样做,你应该尝试在inStack中创建一个char向量。另外,您应该发布完整的编译器消息,包括行号。 – xaxxon

+0

你不明白你为什么不能把'char'转换成'const char *'?你明白为什么''A''永远不会被转换为,例如'0x40000144'?你的容器设置为你添加'string'元素给他们。也许你打算让他们接受'char'类型呢? – mah

+0

你的堆栈应该保存字符,而不是字符串。但是,错误消息没有意义。我确定它来自不同的程序。 – SergeyA

回答

1

你的代码有三个主要的错误。

您正在将字符推送到定义为保存字符串的堆栈和队列中。字符串构造函数不能隐式地从char转换为字符串,因为没有构造函数需要char。你可能意味着它们定义为:

stack<char> inStack; 
queue<char> inQueue; 

您没有设置inLength;我建议像

之后你的if (inString.size() > 0) {来解决这个问题。

最重要的是,你使用i <= inLength(在for循环条件下),这是行不通的;你应该使用<,因为push ing inString[inString.size()]实际上是在你输入的字符之外推一个字符,这总是会导致isPalindrome == false,因为你的堆栈和队列在相应的顶部和前部会有一个无效的(随机垃圾)字符。

这三个更改似乎足以解决您的项目。

一种更简单的解决方案给你的C++迭代器如何可用于减少必须写这样的东西的代码量的一个示例:

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

int main() 
{ 
    vector<char> left, right; // left-to-right and right-to-left lists 

    cout<<"Enter a word to see if it is a palindrome: "; 
    string inString; //user input 
    cin>>inString; 

    if(!inString.empty()){ 
     // add characters left to right 
     left.insert(left.end(), inString.begin(), inString.end()); 
     // add characters in reverse order, right to left 
     right.insert(right.end(), inString.rbegin(), inString.rend()); 
     // compare the two vectors 
     if(left == right) 
      cout<<"It is indeed a palindrome."<<endl; 
     else 
      cout<<"It is not a palindrome."<<endl; 
    } 
} 
0

你忘了分配给inLength字符串的实际长度,并获得外我会非常大,大于它应该是,你可能会得到一个分段错误。

尝试读取字符串以正确分配值。

inLength = inString.size(); 

我希望这可以帮助你。

相关问题