将元素从std :: string推送到字符串类型堆栈时出错

问题描述 投票:0回答:1

我在s1函数中尝试遍历字符串以将每个元素推入字符串类型为isPalindrome()的堆栈时遇到此错误。

没有重载函数实例“ std :: stack <_ty> :: push[与_Ty = std :: string,_Container = std :: deque>]“与参数列表匹配

当我分配时,位于堆栈顶部的字符串变量弹出错误:

'std :: stack >> :: top':非标准语法;使用“&”创建指向成员的指针

为什么提到std::deque

#include <iostream>
#include <string>
#include <stack>
#include <algorithm> 

class Palindrome
{
public:
    Palindrome();
    void inputString();
    std::string convert2lower();
    bool isPalindrome();

private:
    std::string userstring;
    std::stack<std::string> s1;
};

Palindrome::Palindrome()
{}

void Palindrome::inputString()
{
    std::cout << "Enter a string: ";
    std::getline(std::cin,userstring);
}

std::string Palindrome::convert2lower()
{
    userstring.erase(remove(userstring.begin(), userstring.end(), ' '), userstring.end());
    userstring.erase(std::remove_if(userstring.begin(), userstring.end(), ispunct), userstring.end());
    transform(userstring.begin(), userstring.end(), userstring.begin(), tolower);
    return userstring;
}

bool Palindrome::isPalindrome()
{
    size_t n = userstring.size();

    for (size_t i = 0; i < n; ++i)
    {
        s1.push(userstring[i]);
    }

    std::string reversed;
    for (size_t i = 0; i < n; ++i)
    {
        std::string temp = s1.top;
        reversed.insert(i,temp);
        s1.pop();
    }

    if (reversed == userstring) 
    {
        return true;
    }

    return false;
}

int main()
{
    Palindrome p1;

    p1.inputString();

    std::cout << "\nCalling convert2lower(): " << std::endl;
    std::cout << "The new string is " << p1.convert2lower() << std::endl;
    std::cout << "\nCalling isPalindrome(): " << std::endl;

    if (!p1.isPalindrome())
    {
        std::cout << "String is NOT a Palindrome!" << std::endl;
    }
    else
    {
        std::cout << "String is a Palindrome!" << std::endl;
    }
}
c++ string stack palindrome
1个回答
0
投票

这是您的代码,具有绝对的最小更改...

#include <iostream>
#include <string>
#include <stack>
#include <algorithm> 

class Palindrome
{
public:
    Palindrome();
    void inputString();
    std::string convert2lower();
    bool isPalindrome();

private:
    std::string userstring;
    std::stack<char> s1;
};

Palindrome::Palindrome()
{}

void Palindrome::inputString()
{
    std::cout << "Enter a string: ";
    std::getline(std::cin, userstring);
}

std::string Palindrome::convert2lower()
{
    userstring.erase(remove(userstring.begin(), userstring.end(), ' '), userstring.end());
    userstring.erase(std::remove_if(userstring.begin(), userstring.end(), ispunct), userstring.end());
    transform(userstring.begin(), userstring.end(), userstring.begin(), tolower);
    return userstring;
}

bool Palindrome::isPalindrome()
{
    size_t n = userstring.size();

    for (size_t i = 0; i < n; ++i)
    {
        s1.push(userstring[i]);
    }

    std::string reversed;
    for (size_t i = 0; i < n; ++i)
    {
        char temp = s1.top();
        reversed.insert(i, &temp, 1);
        s1.pop();
    }

    if (reversed == userstring)
    {
        return true;
    }

    return false;
}

int main()
{
    Palindrome p1;

    p1.inputString();

    std::cout << "\nCalling convert2lower(): " << std::endl;
    std::cout << "The new string is " << p1.convert2lower() << std::endl;
    std::cout << "\nCalling isPalindrome(): " << std::endl;

    if (!p1.isPalindrome())
    {
        std::cout << "String is NOT a Palindrome!" << std::endl;
    }
    else
    {
        std::cout << "String is a Palindrome!" << std::endl;
    }
}

以下是您的问题的答案:

  1. 没有...的实例,这是因为使用字符串而不是char作为堆栈类型。
  2. 非标准语法...这是因为您没有将()弹出。
  3. 提到双端队列是因为堆栈是双端队列的特殊化。
© www.soinside.com 2019 - 2024. All rights reserved.