需要修改堆栈/链表程序以确定单词是否为回文
Need to modify Stack/Linked List program to determine if a word is a palindrome
所以我写了一个程序,将堆栈类实现为链表。到目前为止,程序接受用户输入的任何字符串,并成功地将每个字符放入堆栈中(至少我认为是这样)。我需要知道的是,如何遍历每个字符并确定字符串是否是回文。有什么提示吗?
这是我到目前为止的代码:
主要:
#include <iostream>
#include <cstdlib>
#include <string>
#include "stack.h"
using namespace std;
int main(){
Stack o;
cout << "Enter a string" << endl;
string word;
cin >> word;
o.divide_String(word);
o.Print();
return 0;
}
页眉:
#ifndef STACKS_H
#define STACKS_H
#include <string>
using namespace std;
class Stack{
private:
typedef struct item{
char letter;
item* prev;
}* itemPtr;
itemPtr stackPtr;
public:
Stack();
void Push(char letter);
void Pop();
void ReadItem(item* r);
void Print();
void Stack::divide_String(string s);
~Stack();
};
#endif
函数定义:
#include <cstdlib>
#include <iostream>
#include "stack.h"
using namespace std;
Stack::Stack(){
stackPtr = NULL;
}
Stack::~Stack(){
itemPtr p1;
itemPtr p2;
p1 = stackPtr;
while(p1 != NULL){
p2 = p1;
p1 = p1->prev;
delete p2;
}
}
void Stack::Push(char letter){
itemPtr n = new item;
n->letter = letter;
if(stackPtr == NULL){
stackPtr = n;
stackPtr->prev = NULL;
}
else{
n->prev = stackPtr;
stackPtr = n;
}
}
void Stack::Pop(){
if(stackPtr == NULL){
cout << "There is nothing on the stack." << endl;
}
else{
itemPtr p = stackPtr;
ReadItem(p);
stackPtr = stackPtr->prev;
p->prev = NULL;
delete p;
}
}
void Stack::ReadItem(item* r){
cout << r->letter;
}
void Stack::Print(){
itemPtr x = stackPtr;
cout << "Current Stack: " << endl;
while(x != NULL){
ReadItem(x);
x = x->prev;
cout << endl;
}
cout << endl;
}
void Stack::divide_String(string s){
for(char &c : s){
Push(c);
}
}
这里有一些提示:
- 这与使用堆栈验证表达式中的括号没有太大区别。
- 回文中的一半字符应该与另一半完全匹配。由于堆栈是后进先出,因此这种比较变得更加容易。
- 您需要考虑如果字符串中有奇数个字符会发生什么,因此不会给您干净的一半
希望这有帮助。
PS:不要放下任何代码,因为我鼓励你尝试解决问题。有几种不同的方法可以做到这一点。
相关文章:
- C++-字符串是否包含一个带有简单循环的单词
- 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?
- 如何检查流中文件的下一个单词是否为 alpha?
- C++ - 检查结构数据类型中的单词是否为回文
- 包含换行符分隔的单词的文件和C++中这些单词的字符串向量的大小是否相同?
- 是否可以检查存储在堆栈上的单词是否是回文,而C++中没有任何附加数据结构
- 检查一个文本文件中的单词是否在另一个文本文件 (C++) 中
- 给定字符串和单词 S 的列表,检查列表中是否存在 S
- 使用 getline 和字符串流检查句子中的单词是否在文件中
- 我试图编写一个代码来查找一个单词是否是回文,但它不起作用。怎么了?
- 内联程序集 - 检查单词是否为回文
- 检查字符串中的第一个单词是否等于 "print"
- c++如何确定字母表中一个单词是否在另一个单词之前
- 我正在尝试制作字典,但我似乎无法搜索以查看该单词是否已经存在
- 需要修改堆栈/链表程序以确定单词是否为回文
- 字符串:使用 strcmp 查找第一个单词是否重复
- 给定一个二维字符矩阵,我们必须检查给定的单词是否存在于其中
- 如何检查一个单词是否以大写字母开头,如果是,则设置条件
- 如何测试单词是否在文本文件中,如果它不在C++中,则将其附加到文件中?
- 检查单词是否包含在数组中