2013-10-03 14 views
0

因此,我编写了一个程序,它将堆栈类实现为链接列表。到目前为止,该程序需要用户输入的任何字符串,并成功地将每个字符放入堆栈(至少我认为它是这样)。我需要知道的是我如何浏览每个角色并确定字符串是否是回文。有小费吗?需要修改堆栈/链接列表程序以确定单词是否为回文

这里是我到目前为止的代码:

主营:

#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); 
    } 

} 

回答

0

这里有几个要点:

  • 这与使用堆栈验证表达式中的括号没有太大区别。
  • 回文中一半的字符应该与另一半相反。由于堆栈是LIFO,所以这种比较变得更容易。
  • 你需要考虑到,如果有一个奇数字符串中的字符会发生什么,因此不会给你一个干净的一半

希望这有助于。注:不要放任何代码,因为我鼓励你尝试解决问题。有几种不同的方式来做到这一点。

相关问题