首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回文函数(字符串、堆栈、队列)

回文函数(字符串、堆栈、队列)
EN

Stack Overflow用户
提问于 2012-10-22 00:03:50
回答 1查看 2.2K关注 0票数 1

我正在尝试创建一个回文功能。我必须把一个字符串放到一个队列中,堆栈。然后比较它们,看看它们是否是回文。在我的函数中,我去掉了空格,将所有字母转换成小写,现在我尝试比较堆栈和队列,看看给定的单词是否是回文。但是我不能这样做,因为错误消息“不能将虚空类型的值分配给一个字符类型的实体。”如果可能的话,请告诉我我做错了什么?

代码语言:javascript
复制
enter bool isPalindrome(string s){
//lowers all letters to lower case so it will not be case sensetive
for (int i = 0; i < s.length(); i ++)
    s[i] = tolower(s[i]);

 //removes white space from the word that is being checked
char c;
int i = 0;
while (s[i])
{
    c=s[i];
    if (isspace(c)) c='\n';
    putchar (c);
    i++;
}

queue<string> q1;
stack<string> s1;
for (int k = 0; k < s.size(); k++) 
    if (isalpha(s[k]))
        q1.push(s);

for (int u = 0; u < s.size(); u++)
    if (isalpha(s[u]))
        s1.push(s);
char e;
char d;
while (q1.size() > 0 )
     e = q1.pop();
     d = s1.pop();
    if (e != d)
        return false;
    else
    return true;

}
EN

回答 1

Stack Overflow用户

发布于 2012-10-22 00:14:31

pop()返回void,因此您的错误。您应该首先从容器中获取值,然后将值从容器中pop出来。请注意,top用于std::stackfrontback用于std::queue

代码语言:javascript
复制
e = q1.front();
q1.pop();
d = s1.top();
s1.pop();

编辑:我忽略的另一个问题是,您将整个字符串存储在队列(和堆栈)中,并试图将它们弹出字符。所以你可能想做的是:

代码语言:javascript
复制
std::queue<char>
std::stack<char>
for (int k = 0; k < s.size(); k++) 
    if (isalpha(s[k]))
        q1.push(s[k]);

for (int u = 0; u < s.size(); u++)
    if (isalpha(s[u]))
        s1.push(s[u]);

堆栈也是一样。

EDIT2:另一个缺失位在最后一个while中。循环周围应该有括号,return true语句应该在循环之后:

代码语言:javascript
复制
while (q1.size() > 0 ) {
    e = q1.front();
    q1.pop();
    d = s1.top();
    s1.pop();
    if (e != d)
        return false;
}
return true;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13003464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档