gpt4 book ai didi

c++ - 回文函数(字符串、堆栈、队列)

转载 作者:行者123 更新时间:2023-11-30 04:24:05 26 4
gpt4 key购买 nike

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

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;

}

最佳答案

pop() 返回 void,因此您的错误。您应该首先从容器中获取值,然后从容器中弹出 值。请注意,您应该为 std::stack 使用 top,为 std::使用 frontback队列

e = q1.front();
q1.pop();
d = s1.top();
s1.pop();

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

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 语句应该在循环之后:

while (q1.size() > 0 ) {
e = q1.front();
q1.pop();
d = s1.top();
s1.pop();
if (e != d)
return false;
}
return true;

关于c++ - 回文函数(字符串、堆栈、队列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13003464/

26 4 0