字符串处理,要求找出满足条件的字典序最小的单词
要求:
1.结果单词至少含有查询单词的一个字母
2.如果字母在‘+’后面,那么这个字母必须出现在结果单词中
3.如果字母在‘-’后面,那么这个字母必须不能出现在结果单词中
4.在一个查询中可以包含多个单词,多个单词使用‘|’分割,只要其中的一个单词满足就可以
变量get表示单词是否满足条件1
变量los表示单词是否满足条件2和3
1 #include <set>
2 #include <iostream>3 #include <string>
4 using namespace std;
5 int main()
6 {
7 char x;
8 string word;
9 while( true)
10 {
11 set<string> s;
12 cin>>word;
13 if(word== "#")
14 break;
15 while(word!= "*")
16 {
17 s.insert(word);
18 cin>>word;
19 }
20 cin>>word;
21 while(word!= "**")
22 {
23 set<string>::iterator si;
24 int len=word.size();
25 int los= 0;
26 int get= 0;
27 for(si=s.begin();si!=s.end();si++)
28 {
29 get= 0;
30 los= 0;
31 int func= 0;
32 for( int i= 0;i!=len;i++)
33 {
34 if(word[i]== '+')
35 {
36 func= 1;
37 continue;
38 }
39 if(word[i]== '-')
40 {
41 func= 2;
42 continue;
43 }
44 if(word[i]== '|'&&(los== 1||get== 0))
45 {
46 los= 0;
47 func= 0;
48 get= 0;
49 continue;
50 }
51 int len2=(*si).size();
52 if(los== 0)
53 {
54 if(func== 0&&get== 0)
55 {
56 for( int j= 0;j!=len2;j++)
57 if((*si)[j]==word[i])
58 get= 1;
59 }
60 if(get== 1&&func== 1)
61 {
62 int f= 0;
63 for( int j= 0;j!=len2;j++)
64 if((*si)[j]==word[i])
65 f= 1;
66 if(f== 0)
67 los= 1;
68 }
69 if(get== 1&&func== 2)
70 {
71 int f= 0;
72 for( int j= 0;j!=len2;j++)
73 if((*si)[j]==word[i])
74 f= 1;
75 if(f== 1)
76 los= 1;
77 }
78 }
79 //cout<<get<<" "<<los<<" "<<word[i]<<" "<<(*si)[2]<<endl;
80 }
81 if(get== 0)
82 los= 1;
83 if(los== 0)
84 {
85 cout<<(*si)<<endl;
86 break;
87 }
88 }
89 if(los== 1)
90 cout<< "NONE"<<endl;
91 cin>>word;
92 }
93 cout<< "$"<<endl;
94 }
95 }