во как написал выведет слова первого преложения, начиная с самого короткого которых нет во втором
| Код | #include <iostream> #include <string> #include <vector> #include <algorithm> #include <set> using namespace std; const bool mins(const string &a, const string &b) { return( a.length() < b.length() ); } int main() { char separators[7]={',','.',':',' ','\"','-','\''}; // можно еще пофантазировать на эту тему string stmp; vector < string > results; vector < string > :: iterator vit; set < string > words1, words2; set < string >::iterator iterst1, iterst2; string s1( "This is are test string for su find this, and others logs fa s god" ); //вместо этого можно использовать char и забрать из консоли //cout.getline(..) string s2( "This is are test string for find this, and others god"); bool flag; for(unsigned int i=0;i<=s1.length(); i++) { flag = false; for(unsigned int j=0; j<7; j++) { if( s1[i]==separators[j] || s1[i] =='\0') { flag = true; words1.insert(stmp); stmp.clear(); break; } } if(!flag) stmp.push_back(s1[i]); } stmp.clear(); for(unsigned int i=0;i<=s2.length(); i++) { flag = false; for(int j=0; j<7; j++) { if( s2[i]==separators[j] || s2[i] =='\0') { flag = true; words2.insert(stmp); stmp.clear(); break; } } if(!flag) stmp.push_back(s2[i]); } for(iterst1 = words1.begin(); iterst1!=words1.end(); ++iterst1) { if( words2.find(*iterst1)==words2.end() ) results.push_back(*iterst1); } sort( results.begin(), results.end(), mins ); for(vit =results.begin(); vit!=results.end(); ++vit) cout <<"--"<< *vit <<"--"<< endl; //если тут поставить break будет только первое самое короткое слово которого нет в предложении return 0; }
|
|