Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 弹出堆栈字符并将其保存为字符串时出现问题_C++_String_Stack - Fatal编程技术网

C++ 弹出堆栈字符并将其保存为字符串时出现问题

C++ 弹出堆栈字符并将其保存为字符串时出现问题,c++,string,stack,C++,String,Stack,我有时在编程方面有点麻烦,但我一般都很好,总是有完全理解这个概念的问题,但是当我试图实现一个实际的程序来执行一个操作时,我遇到了困难 我有一个任务要做,在这个任务中,我必须获取一个输入字符串,将其逐个字符读入堆栈(使用链表),然后将结果从堆栈中弹出,将其存储到一个新字符串,然后比较字符串以确定特定的输入字符串是否是回文 到目前为止,我似乎遇到的唯一问题是(希望)在节目的最后。当我尝试从堆栈中弹出每个字符并将它们分别存储在字符串中时,Visual Studio会遇到一个问题:“错误C2664:‘s

我有时在编程方面有点麻烦,但我一般都很好,总是有完全理解这个概念的问题,但是当我试图实现一个实际的程序来执行一个操作时,我遇到了困难

我有一个任务要做,在这个任务中,我必须获取一个输入字符串,将其逐个字符读入堆栈(使用链表),然后将结果从堆栈中弹出,将其存储到一个新字符串,然后比较字符串以确定特定的输入字符串是否是回文

到目前为止,我似乎遇到的唯一问题是(希望)在节目的最后。当我尝试从堆栈中弹出每个字符并将它们分别存储在字符串中时,Visual Studio会遇到一个问题:“错误C2664:‘stack::pop’:无法将参数1从‘unsigned int’转换为‘char&’”

void Stack::pop(字符和输入字符串){
StackNode*temp;
if(isEmpty()){
下一步;
删除顶部;
顶部=温度;
}
}
int main(){
堆栈-字符串堆栈;
字符串输入_字符串;
字符串反向输入;
无法输入_字符串;
for(无符号整数i=0;i
while (!stringStack.isEmpty()) {
    for (unsigned int j=0; j < input_string.length(); j++) {
        stringStack.pop(j) = reverse_input[j];
    }
}
或:

另外,
stringStack.pop(j)=反向输入[j];
实际上没有赋值,因为
pop
是一个无效函数

一个备选方案是:

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

是(!stringStack.esEmpty()时的
必要吗?在我看来,您只需要迭代
for
一次就可以填充
反向输入
列表,假设
for
工作正常,实际上,您只能使用
而不是
for
,因为您声明了对单个字符不是字符串。对1个或多个字符使用
std::string
。您没有停下来阅读错误消息并查看生成错误消息的代码。您正在传递循环索引
j
,其中需要一个字符。如果您查看生成错误的行,答案就在那里。
for( unsigned int j = 0; !stringStack.isEmpty() ; j++ ){
    //Code Here
}
while( !stringStack.isEmpty() ){
    //Code Here
}
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();
}