需要简单的递归调用,主要是string用的有点纠结,还是不熟练啊
#include<iostream>
#include<string>
#include <stack>
#define N 255
char str[N];
std::string stri;
std::string strn;
int num;
std::string::iterator process( std::string& str,std::string::iterator itr_begin)
{
int n;
std::string::iterator itr_end;
for(std::string::iterator itr=itr_begin;itr!=str.end();itr++){
if(*itr>'0'&&*itr<'9'){
strn.append(1,*itr);
}else if(*itr=='('){
if(strn.empty()){
n=1;
}else{
n=atoi(strn.c_str());
}
strn.clear();
for(int i=0;i!=n;i++){
itr_end=process(str,itr+1);
}
itr=itr_end;
}else if(*itr==')'){
return itr;
}else{
if(strn.empty()){
std::cout<<*itr;
}else{
n=atoi(strn.c_str());
strn.clear();
for(int i=0;i!=n;i++){
std::cout<<*itr;
}
}
}
}
return str.end();
}
int main()
{
while (std::cin>>num){
for(int i=0;i!=num;i++){
std::cin>>str;
stri.assign(str);
process(stri,stri.begin());
std::cout<<std::endl;
memset(str,0,sizeof(str));
stri.clear();
}
}
}
hdu-2072
#include<iostream>
#include<string>
#include<set>
std::set<std::string> set_;
std::string str;
int pos1,pos2;
int main()
{
while (std::getline(std::cin,str)&&str[0]!='#'){
while ((pos2=str.find_first_of(' ',pos1))!=std::string::npos){
if(pos2!=pos1){
set_.insert(str.substr(pos1,pos2-pos1));
}
pos1=pos2+1;
}
if(pos1!=str.size()){
set_.insert(str.substr(pos1,str.size()-pos1));
}
std::cout<<set_.size()<<std::endl;
str.clear();
set_.clear();
pos1=pos2=0;
}
}