字符串的层次关系

来源:互联网 发布:mac搜狗五笔组词 编辑:程序博客网 时间:2024/05/22 15:12

例如给一个字符串(aaaa(bbbb(cccc,dddd),eeee(ffff))),表示各个人之间的领导关系。

如 aaaa是bbbb和eeee的领导,bbbb是cccc和dddd的领导。

#include<iostream>#include<string>using namespace std;typedef struct{string name;    int parent;}Node;int search(Node tree[100],int count,string s){int i;    for(i=0;i<count;i++)if(tree[i].name==s)break;if(i==count)return -1;elsereturn i;}int main(){string str;while(1){cout<<"请输入一个含有关系的字符串"<<endl;cin>>str;if(str=="0")break;Node tree[100];int countree=0;int i,j,k,m,n;string str2[100];int len=0;for(i=0;i<100;i++)tree[i].parent=-1;for(i=0;i<str.size();i++)//11{if(str[i]=='('||str[i]==','||str[i]==')'){//将s1初始化为字符str[i]的一个副本 string s1(1,str[i]);//string s4(n,'c');   将s4 初始化为字符'c'的n个副本str2[len]=s1;//记录特殊符号的位置   str2[0]=(;   str2[1]=(; str2[2]=(; str2[3]=,;str2[4]=); str2[5]=,;str2[6]=(;str2[7]=);str2[8]=);str2[9]=);len++;}else{string temp;j=0;for(;i<str.size();i++){if(str[i]=='('||str[i]==','||str[i]==')'){   i--;break;}else{temp.insert(temp.size(),1,str[i]);//temp=aaaa; temp=bbbb;temp=cccc;temp=dddd;temp=eeee;temp=ffff;j++;}}str2[len]=temp;  //  str2[1]=aaaa;  str2[2]=bbbb;str2[3]=cccc;str2[4]=dddd;str2[5]=eeee;str2[6]=ffff;len++;tree[countree].name=temp;//tree[0].name=aaaa; tree[1].name=bbbb;tree[2].name=cccc;tree[3].name=dddd;tree[4].name=eeee;tree[5].name=ffff;countree++;}}//11string stack[100];int top=-1;for(i=0;i<len;i++)//22{if(str2[i]!=")"){top++;stack[top]=str2[i];//stack[0]=(;stack[1]=(;stack[2]=(;stack[3]=,;}else{j=top;while(j>0&&stack[j]!="(")j--;if(j==0)goto label1;n=search(tree,countree,stack[j-1]);for(k=j+1;k<=top;k++)if(stack[k]!=","){m=search(tree,countree,stack[k]);tree[m].parent=n;}top=j-1;}}//22label1:cout<<"请输入一个要查找的字符串"<<endl;cin>>str;string str3[100];int count=0;n=search(tree,countree,str);if(n!=-1){    str3[count]=str;count++;while(tree[n].parent!=-1){    str3[count]=tree[tree[n].parent].name;    count++;            n=tree[n].parent;}for(i=count-1;i>0;i--){cout<<str3[i]<<">";}cout<<str3[0]<<endl;;}    else{cout<<"输入错误"<<endl;//exit(0);}}return 0;}/*(aaaa(bbbb(cccc,dddd),eeee(ffff)))*/


0 0
原创粉丝点击