我有时会遇到编程方面的麻烦,但我一般都很好,总是有理解这个概念的问题,但是当我尝试实现一个实际的程序来执行操作时,我碰到了一堵砖墙。 / p>
我有一个工作分配,我必须在其中输入一个输入字符串,逐个字符地读取它(使用链接列表)然后将结果弹出堆栈,将其存储到新字符串然后比较字符串以确定该特定输入字符串是否是回文结构。
到目前为止,我似乎遇到的唯一问题是(希望)在该计划的最后。当我尝试从堆栈中弹出每个字符并将它们单独存储在一个字符串中时,我遇到一个问题,Visual Studio告诉我:“错误C2664:'Stack :: pop':无法从'unsigned int转换参数1 '到'char&'“
void Stack::pop(char &input_string) {
StackNode* temp;
if (isEmpty()) {
cout << "The stack is empty." << endl;
}
else {
input_string = top->value;
temp = top->next;
delete top;
top = temp;
}
}
int main () {
Stack stringStack;
string input_string;
string reverse_input;
cout << "Input the desired string to determine if it is a palindrome or not. No spaces please." << endl;
cin >> input_string;
for (unsigned int i=0; i < input_string.length(); i++) {
stringStack.push(input_string[i]);
}
while (!stringStack.isEmpty()) {
for (unsigned int j=0; j < input_string.length(); j++) {
stringStack.pop(j) = reverse_input[j];
}
}
if (reverse_input == input_string) {
cout << "Your input is a palindrome!" << endl;
}
else {
cout << "Your input was not a palindrome, try again!" << endl;
}
system ("PAUSE");
}
我意识到它告诉我,我不能将j传递给pop函数来弹出值,因为我声明的pop函数需要一个char值。
可以通过将pop函数的输入更改为整数,然后使用pop函数返回char值来解决这个问题吗?
我排除了除pop函数和主执行函数之外的cpp文件的所有其他函数,如果你因某些原因需要查看另一部分,请告诉我。
提前感谢您的帮助。非常感谢。
答案 0 :(得分:0)
在这部分:
while (!stringStack.isEmpty()) {
for (unsigned int j=0; j < input_string.length(); j++) {
stringStack.pop(j) = reverse_input[j];
}
}
假设目标是使用pop
将元素放在堆栈顶部,并将其添加到字符串reverse_input
的末尾,以便生成的reverse_input
将是反转input_string
,有一个太多的循环。
for( unsigned int j = 0; !stringStack.isEmpty() ; j++ ){
//Code Here
}
或者:
while( !stringStack.isEmpty() ){
//Code Here
}
stringStack.pop(j) = reverse_input[j];
实际上并没有分配任何内容,因为pop
是一个void函数。
以下是另一种选择:
修改pop
,使其返回顶部的char
元素。
char Stack::pop() {
StackNode* temp;
char mychar = '\0';
if (isEmpty()) {
cout << "The stack is empty." << endl;
}
else {
mychar = top->value;
temp = top->next;
delete top;
top = temp;
}
return mychar;
}
然后:
reverse_input = ""; //To make sure it is empty
while( !stringStack.isEmpty() ){
reverse_input += stringStack.pop();
}