没有合适的资源?快使用搜索试试~ 我知道了~
c++string用法详解.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 136 浏览量
2023-04-04
21:35:46
上传
评论
收藏 6.88MB PDF 举报
温馨提示
试读
26页
。
资源推荐
资源详情
资源评论
C++ string 详解
任何人对本文进行引用都要标明作者是 Nicolai M.Josuttis
///////////////////////////////////////////////////////////////////////////////////
C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用 C 或者 C++,
为什么?原因众多,其中之一就是 C/C++的文本处理功能太麻烦,用起来很不方便。以前没有
接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会 C++的精华,
或者不太懂 C++,现在我接触 perl, php, 和 Shell 脚本以后,开始理解了以前为什么有人说 C++
文本处理不方便了。
举例来说,如果文本格式是:用户名 电话号码,文件名 name.txt
Tom 23245332
Jenny 22231231
Heny 22183942
Tom 23245332
…
现在我们需要对用户名排序,且只输出不同的姓名。
那么在 shell 编程中,可以这样用:
?
[Copy to clipboard]View Code CPP
awk '{print $1}' name.txt | sort | uniq
简单吧?
如果使用 C/C++ 就麻烦了,他需要做以下工作:
先打开文件,检测文件是否打开,如果失败,则退出。
声明一个足够大得二维字符数组或者一个字符指针数组
读入一行到字符空间
然后分析一行的结构,找到空格,存入字符数组中。
关闭文件
写一个排序函数,或者使用写一个比较函数,使用 sort()排序
遍历数组,比较是否有相同的,如果有,则要删除, copy…
输出信息
你可以用 C++或者 C 语言去实现这个流程。如果一个人的主要工作就是处理这种类似的文本 (例
如做 apache 的日志统计和分析 ),你说他会喜欢 C/C++么?
当然,有了 STL,这些处理会得到很大的简化。我们可以使用 fstream 来代替麻烦的 fopen fread
fclose, 用 vector 来代替数组。最重要的是用 string 来代替 char * 数组,使用 sort 排序算法来
排序,用 unique 函数来去重。听起来好像很不错。看看下面代码 (例程 1):
?
[Copy to clipboard]View Code CPP
#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 试一试。
这里 string 的作用不只是可以存储字符串,还可以提供字符串的比较,查找等。在 sort 和 unique
函数中就默认使用了 less 和 equal_to 函数, 上面的一段代码,其实使用了 string 的以下功能:
存储功能,在 getline() 函数中
查找功能,在 find() 函数中
子串功能,在 substr() 函数中
string operator < , 默认在 sort() 函数中调用
string operator == , 默认在 unique() 函数中调用
总之,有了 string 后,C++的字符文本处理功能总算得到了一定补充,加上配合 STL 其他容器
使用,其在文本处理上的功能已经与 perl, shell, php 的距离缩小很多了。 因此掌握 string 会让
你的工作事半功倍。
1 string 使用
其实,string 并不是一个单独的容器,只是 basic_string 模板类的一个 typedef 而已,相对应的
还有 wstring, 你在 string 头文件中你会发现下面的代码 :
?
[Copy to clipboard]View Code CPP
extern "C++" {
typedef basic_string <char> string;
typedef basic_string <wchar_t> wstring;
} // extern "C++"
由于只是解释 string 的用法,如果没有特殊的说明,本文并不区分 string 和 basic_string 的区
别。
string 其实相当于一个保存字符的序列容器, 因此除了有字符串的一些常用操作以外, 还有包含
了所有的序列容器的操作。字符串的常用操作包括: 增加、删除、修改、查找比较、链接、输入、
输出等。详细函数列表参看附录。 不要害怕这么多函数, 其实有许多是序列容器带有的, 平时不
一定用的上。
如果你要想了解所有函数的详细用法, 你需要查看 basic_string ,或者下载 STL 编程手册。这里
通过实例介绍一些常用函数。
1.1 充分使用 string 操作符
string 重载了许多操作符,包括 +, +=, <, =, , [], <<, >> 等,正式这些操作符,对字符串操作非
常方便。先看看下面这个例子:
?
[Copy to clipboard]View Code CPP
#include <string>
#include <iostream>
using namespace std;
int main()
{
string strinfo="Please input your name:";
cout << strinfo ;
cin >> strinfo;
if( strinfo == "winter" )
cout << "you are winter!"<<endl;
else if( strinfo != "wende" )
cout << "you are not wende!"<<endl;
else if( strinfo < "winter")
cout << "your name should be ahead of
winter"<<endl;
else
cout << "your name should be after of
winter"<<endl;
剩余25页未读,继续阅读
资源评论
apple_51426592
- 粉丝: 9520
- 资源: 9659
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功