Stack.h
#ifndef STACK_H_
#define STACK_H_
class Stack
{
public:
bool find(const string &elem) const;//查找某值
int count(const string &elem) const;//计算次数
bool push(const string&);
bool pop( string &elem);
bool peek(string &elem);
bool empty() const{ return _stack.empty();}
bool full() const{return _stack.size() == _stack.max_size();}
int size() const { return _stack.size();}
private:
vector<string> _stack;
};
#endif
Stack.cpp
#include<string>
#include<vector>
#include "Stack.h"
using namespace std;
bool Stack::pop(string &elem)
{
if(empty())
return false;
elem=_stack.back();
_stack.pop_back();
return true;
}
bool Stack::peek(string &elem)
{
if(empty())
return false;
elem=_stack.back();
return true;
}
bool Stack::push(const string &elem)
{
if(full())
return false;
_stack.push_back(elem);
return true;
}
bool Stack::find(const string &elem) const
{
vector<string>::const_iterator end_it = _stack.end();
return::find(_stack.begin(),end_it,elem)!=end_it;
}
int Stack::count(const string &elem) const
{
return::count(_stack.begin(),_stack.end(),elem);
}
main.cpp
#include<iostream>
#include<string>
#include<vector>
#include "Stack.h"
using namespace std;
int main()
{
Stack st;
string str;
while (cin>>str && !st.full())
{
st.push(str);
}
if (st.empty())
{
cout<<‘\n‘<<"Oops: no strings were read--bailing out\n";
return 0;
}
st.peek(str);
if (st.size()==1 && str.empty())
{
cout<<‘\n‘<<"Oops: no strings were read--bailing out\n";
return 0;
}
cout<<‘\n‘<<"Read in"<<st.size()<<"strings!\n"
<<"The strings,in reverse order:\n";
while (st.size())
{
if(st.pop(str))
cout<<str<<‘ ‘;
}
cout<<‘\n‘<<"There are now "<<st.size()<<"elements in the stack!\n";
cout<<‘\n‘<<"Read in"<<st.size()<<"strings!\n";
cin.clear();
cout<<"what word to search for?";
cin>>str;
bool found = st.find(str);
int count = found ? st.count(str) : 0;
cout<<str<<(found?"is":"isn‘t")<<"in the stack.";
if(found)
{
cout<<"It occurs"<<count<<"times\n";
}
}