[Accelerated c++读书笔记] 读入一行,拆分每个word。

来源:互联网 发布:java 通讯协议 编辑:程序博客网 时间:2024/05/29 19:49

    很多C++书籍都鼓励我们使用vector替换数组,使用string替换传统的字符串,我一直相信可以这么做,而且这么做了以后,会减少工作量,提高效率。知道是一回事,实际操作起来是一回事,每次使用string的时候总会有这样那样的问题。我在想,之所以Accelerated c++这本书这么有名,或许就是因为作者直接教我们用C++的方式思考,这本书只看了一小部分,但是有个例子很能说明问题——作者教我们如何以C++的方式思考。


下面的两个程序都是实现相同的功能,读入一行,如后将该句子里的单词拆分出来。

程序1:

#include<iostream>#include<vector>#include<cctype>#include<string>using namespace std;vector<string>split(const string&s){vector<string> ret;typedef string::size_type string_size;string_size i = 0;while( i != s.size() ){while( i != s.size() && isspace(s[i]))++i;string_size j =i;while( j != s.size() && ! isspace( s[j]))++j;if( i != j){ret.push_back( s.substr(i,j - 1 ));i = j;}}return ret;}int main(){string str;getline( cin, str);vector<string> vec = split( str );cout << " vec.size() = " << vec.size() << endl;cout << str << endl;return 0;}


程序2(纯C++实现):

#include<iostream>#include<vector>#include<cctype>#include<string>#include<algorithm>using namespace std;bool space( char c){return isspace(c);}bool not_space( char c){return !isspace(c);}vector<string> split( const string& str){typedef string::const_iterator iter;vector<string> ret;iter i = str.begin();while( i != str.end()){i = find_if( i , str.end(), not_space);iter j  = find_if( i, str.end(), space);if ( i != str.end() )ret.push_back( string( i,j ));i = j;}return ret;}int main(){string str;getline( cin, str);vector<string> vec = split( str );cout << "vec.size() = " << vec.size() << endl;        cout << str << endl;return 0; }



书上还有一个例子很好,可以用来考察一个是否很熟悉STL,用一行代码来判断一个字符串是不是回文:

#include<iostream>#include<algorithm>#include<string>using namespace std;int main(){string str;cin >> str;        //核心代码就这么一行if( equal( str.begin(), str.end(), str.rbegin()) ){cout << str << " is a plaindrome " << endl;}else{cout << str << " is not a plaindrome " << endl;}return 0;}



原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小孩子偷邻居家的钱怎么办 碰见美国人说叙利亚诈骗团伙怎么办 日服的火焰纹章闪退怎么办 冒险岛没潜能的怎么办 冒险岛法师运气不够怎么办 cad文件打开老是闪退白屏怎么办 上古卷轴5坏档怎么办 冒险岛2 65级后怎么办 第二次起诉离婚对方不同意怎么办 起诉离婚对方不同意离婚怎么办 我12爸妈离婚该怎么办 苹果迅雷下载的链接打不开怎么办 苹果上装的迅雷打不开怎么办 mp4进水水干了后打不开怎么办 迅雷闪退ios10.3怎么办 用辣椒辣到眼睛怎么办 辣椒辣到眼皮了怎么办 眼被辣椒辣了怎么办 老公欠银行的钱怎么办 离婚老公欠的钱怎么办 欠了几十万债怎么办 执行死刑时已怀孕怎么办 执行死刑世已经怀孕怎么办 孩子被爸爸打该怎么办 二年级的孩子逃课怎么办 龙妈和雪诺怎么办 车本扣6分怎么办 超速50扣了12分怎么办 开车超速扣12分怎么办 超速一次记12分怎么办? 驾照超速扣12分怎么办 c牌一次扣12分怎么办 超速罚500扣12分怎么办 高速超速记3分怎么办 高速超速记12分怎么办 过江隧道关闭了怎么办 高速限速60超了怎么办 超速扣了12分怎么办 上海 12分扣完了怎么办 狗抓伤只淌白沫怎么办 刑事案件法院迟迟不判决怎么办