C++ 错误:从';char';至';常量字符*';回文程序
这段代码试图测试字符串是否为回文。它读取一个字符串,在读取时将每个字符推到堆栈上,同时将其添加到队列中。然后,它使用基本的堆栈和队列操作来确定字符串是否为回文 当程序遇到以下错误时,程序会出现上述错误:C++ 错误:从';char';至';常量字符*';回文程序,c++,C++,这段代码试图测试字符串是否为回文。它读取一个字符串,在读取时将每个字符推到堆栈上,同时将其添加到队列中。然后,它使用基本的堆栈和队列操作来确定字符串是否为回文 当程序遇到以下错误时,程序会出现上述错误: inStack.push(inString[i]); inQueue.push(inString[i]); 我不明白为什么,也不知道如何修复它。我对这一错误进行的研究在适用于我的案例时并没有取得成果。我对C++相当陌生,所以如果我忽略了一些愚蠢的东西,请原谅我。< /P> 代码如下: #inc
inStack.push(inString[i]);
inQueue.push(inString[i]);
我不明白为什么,也不知道如何修复它。我对这一错误进行的研究在适用于我的案例时并没有取得成果。我对C++相当陌生,所以如果我忽略了一些愚蠢的东西,请原谅我。< /P>
代码如下:
#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;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
stack inStack;
排队;
string inString;//用户输入
int inLength;//循环计数器变量
bool isPalindrome(假);
库廷字符串;
如果(inString.size()>0)
{
对于(inti=0;i您忘记了将字符串的实际长度指定给inLength,而得到了一个外部值i变得非常大,比它应该的大,您可能会得到一个分段错误
读取字符串后,请尝试正确分配值
inLength = inString.size();
我希望这对您有所帮助。您的代码中有三个主要错误
您正在将字符推送到定义为保存字符串的堆栈和队列上。字符串构造函数无法隐式地从字符转换为字符串,因为没有接受字符的构造函数。您可能打算将它们定义为:
stack<char> inStack;
queue<char> inQueue;
在if(inString.size()>0)之后{
来修复该问题
最重要的是,使用i指令[i]是一个字符,而不是字符串。如果你想这样做,你应该试着让inStack成为字符的向量。此外,你应该发布完整的编译器消息,包括行号。你不明白为什么不能将char
转换为const char*
?你明白为什么'a'
永远不会被转换吗例如,0x40000144
?您的容器设置为向其中添加string
元素。也许您想让它们接受char
类型?堆栈应该包含字符,而不是字符串。但是,错误消息没有意义。我确信它来自不同的程序。
inLength = inString.size();
#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;
}
}