现在的位置: 首页 > 综合 > 正文

详细解说STL string

2013年05月21日 ⁄ 综合 ⁄ 共 1660字 ⁄ 字号 评论关闭

详细解说STL string

·   详细解说STL string 

o        0 前言: string 的角色 

o        1 string 使用 

§ 1.1 充分使用string 操作符 

§ 1.2 眼花缭乱的string find 函数 

§ 1.3 string insert, replace, erase 

o        2 string  C风格字符串 

o        3 string  Charactor Traits 

o        4 string 建议 

o        5 小结 

o        6 附录 

0 前言: string 的角色 

C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触perl, php, Shell脚本以后,开始理解了以前为什么有人说C++文本处理不方便了。 

举例来说,如果文本格式是:用户名 电话号码,文件名name.txt

Tom 23245332

Jenny 22231231

Heny 22183942

Tom 23245332

...

现在我们需要对用户名排序,且只输出不同的姓名。 

那么在shell 编程中,可以这样用: 

awk '{print $1}' name.txt | sort | uniq

简单吧? 

如果使用C/C++ 就麻烦了,他需要做以下工作: 

1.     先打开文件,检测文件是否打开,如果失败,则退出。 

2.     声明一个足够大得二维字符数组或者一个字符指针数组 

3.     读入一行到字符空间 

4.     然后分析一行的结构,找到空格,存入字符数组中。 

5.     关闭文件 

6.     写一个排序函数,或者使用写一个比较函数,使用qsort排序 

7.     遍历数组,比较是否有相同的,如果有,则要删除,copy...

8.     输出信息 

你可以用C++或者C语言去实现这个流程。如果一个人的主要工作就是处理这种类似的文本(例如做apache的日志统计和分析),你说他会喜欢C/C++么? 

当然,有了STL,这些处理会得到很大的简化。我们可以使用 fstream来代替麻烦的fopen fread fclose, vector 来代替数组。最重要的是用 string来代替char * 数组,使用sort排序算法来排序,用unique 函数来去重。听起来好像很不错 
。看看下面代码(例程1): 

#include <string>

#include <iostream>

#include <algorithm>

#include <vector>

#include <fstream>

using namespace std;

int main(){

        ifstream in("name.txt");

        string strtmp;

        vector<string> vect;

        while(getline(in, strtmp, '/n'))

        vect.push_back(strtmp.substr(0, strtmp.find(' ')));

        sort(vect.begin(), vect.end());

        vector<string>::iterator it=unique(vect.begin(), vect.end());

        copy(vect.begin(), it, ostream_iterator<string>(cout, "/n"));

        return 0;

}

也还不错吧,至少会比想象得要简单得多!(代码里面没有对错误进行处理,只是为了说明问题,不要效仿).

当然,在这个文本格式中,不用vector而使用map会更有扩充性,例如,还可通过人名找电话号码等等,但是使用了map就不那么好用sort了。你可以用map试一试。

抱歉!评论已关闭.