Accelerated C++ Exercise 6-2

来源:互联网 发布:录制视频软件电脑 编辑:程序博客网 时间:2024/05/20 06:23
#ifndef GRAUD_urls_h#define GRAUD_urls_h#include <vector>#include <string>std::vector<std::string> find_urls(const std::string& );#endif
#include <algorithm>#include <string>#include <vector>#include <cctype>#include "urls.h"using std::find;using std::find_if;#ifndef _MSC_VERusing std::isalnum;using std::isalpha;using std::isdigit;#endifusing std::search;using std::string;using std::vector;bool not_url_char(char);string::const_iteratorurl_end(string::const_iterator, string::const_iterator);string::const_iteratorurl_beg(string::const_iterator, string::const_iterator);vector<string> find_urls(const string& s) {vector<string> ret;typedef string::const_iterator iter;iter b=s.begin(),e=s.end();while(b!=e){b=url_beg(b,e);if(b!=e){iter after=url_end(b,e);ret.push_back(string(b,after));b=after;}}return ret;}string::const_iterator url_end(string::const_iterator b,string::const_iterator e){return find_if(b,e,not_url_char);}bool not_url_char(char c){static const string url_ch="~;/?:@=&$-_.+!*'(),";return !(isalnum(c) || find(url_ch.begin(),url_ch.end(),c)!=url_ch.end());}string::const_iteratorurl_beg(string::const_iterator b, string::const_iterator e) {static const string sep="://";typedef string::const_iterator iter;iter i=b;while((i=search(i,e,sep.begin(),sep.end()))!=e){if(i != b && i + sep.size() != e) {iter beg=i;while (beg!=b&&isalpha(beg[-1]))--beg;if(beg != i && !not_url_char(i[sep.size()]))return beg;}i+=sep.size();}return e;}

#include <algorithm>#include <cctype>#include <iostream>#include <string>#include <vector>#include "urls.h"using std::cout;using std::cin;using std::endl;using std::find_if;using std::getline;using std::string;using std::vector;int main() {string s;while (getline(cin, s)) {vector<string> v = find_urls(s);#ifdef _MSC_VERfor (std::vector<string>::const_iterator i = v.begin();#elsefor (vector<string>::const_iterator i = v.begin();#endifi != v.end(); ++i)cout << *i << endl;}system("pause");return 0;  }


原创粉丝点击