云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > String类函数用法总结3

String类函数用法总结3

  • 62 次阅读
  • 3 次下载
  • 2025/6/3 6:24:59

C++中的string类

前言: string 的角色 1 string 使用

1.1 充分使用string 操作符

1.2 眼花缭乱的string find 函数

1.3 string insert, replace, erase 2 string 和 C风格字符串 3 string 和 Charactor Traits 4 string 建议 5 小结

6 附录前言: 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++ 就麻烦了,他需要做以下工作:

先打开文件,检测文件是否打开,如果失败,则退出。 声明一个足够大得二维字符数组或者一个字符指针数组 读入一行到字符空间

然后分析一行的结构,找到空格,存入字符数组中。 关闭文件

写一个排序函数,或者使用写一个比较函数,使用qsort排序 遍历数组,比较是否有相同的,如果有,则要删除,copy... 输出信息

你可以用C++或者C语言去实现这个流程。如果一个人的主要工作就是处理这种

类似的文本(例如做apache的日志统计和分析),你说他会喜欢C/C++么?

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

ifstream in(\string strtmp;

vector vect;

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

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

vector::iterator it=unique(vect.begin(), vect.end()); copy(vect.begin(), it, ostream_iterator(cout, \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 头文件中你会发现下面的代码:

extern \

typedef basic_string string; typedef basic_string wstring; } // extern \

由于只是解释string的用法,如果没有特殊的说明,本文并不区分string 和 basic_string的区别。

string 其实相当于一个保存字符的序列容器,因此除了有字符串的一些常用操作以外,还有包含了所有的序列容器的操作。字符串的常用操作包括:增加、删除、修改、查找比较、链接、输入、输出等。详细函数列表参看附录。不要害怕这么多函数,其实有许多是序列容器带有的,平时不一定用的上。

如果你要想了解所有函数的详细用法,你需要查看basic_string,或者下载STL编程手册。这里通过实例介绍一些常用函数。 1.1 充分使用string 操作符

string 重载了许多操作符,包括 +, +=, <, =, , [], <<, >>等,正式这些操作符,对字符串操作非常方便。先看看下面这个例子:tt.cpp(例程2)

#i nclude #i nclude using namespace std; int main(){

string strinfo=\cout << strinfo ; cin >> strinfo;

if( strinfo == \

cout << \else if( strinfo != \

cout << \else if( strinfo < \

cout << \else

cout << \strinfo += \cout << strinfo<

cout <<\

string strtmp = \

for(int i = 0 ; i < strtmp.size(); i ++) cout<

下面是程序的输出 -bash-2.05b$ make tt

c++ -O -pipe -march=pentiumpro tt.cpp -o tt -bash-2.05b$ ./tt

Please input your name:Hero you are not wende!

Hero , Welcome to China!

How are you? Hero , Welcome to China!

有了这些操作符,在STL中仿函数都可以直接使用string作为参数,例如 less, great, equal_to 等,因此在把string作为参数传递的时候,它的使用和int 或者float等已经没有什么区别了。例如,你可以使用: map mymap;

//以上默认使用了 less

有了 operator + 以后,你可以直接连加,例如:

string strinfo=\

string strlast=\//你还可以这样:

string strtest=\

看见其中的特点了吗?只要你的等式里面有一个 string 对象,你就可以一直连续\,但有一点需要保证的是,在开始的两项中,必须有一项是 string 对象。其原理很简单:

系统遇到\号,发现有一项是string 对象。 系统把另一项转化为一个临时 string 对象。

执行 operator + 操作,返回新的临时string 对象。 如果又发现\号,继续第一步操作。

由于这个等式是由左到右开始检测执行,如果开始两项都是const char* ,程序自己并没有定义两个const char* 的加法,编译的时候肯定就有问题了。

有了操作符以后,assign(), append(), compare(), at()等函数,除非有一些特殊的需求时,一般是用不上。当然at()函数还有一个功能,那就是检查下标是否合法,如果是使用: string str=\

//下面一行有可能会引起程序中断错误

搜索更多关于: String类函数用法总结3 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

C++中的string类 前言: string 的角色 1 string 使用 1.1 充分使用string 操作符 1.2 眼花缭乱的string find 函数 1.3 string insert, replace, erase 2 string 和 C风格字符串 3 string 和 Charactor Traits 4 string 建议 5 小结 6 附录前言: string 的角色 C++ 语言是个十分优秀的语言,但优秀并不表示完美。还是有许多人不愿意使用C或者C++,为什么?原因众多,其中之一就是C/C++的文本处理功能太麻烦,用起来很不方便。以前没有接触过其他语言时,每当别人这么说,我总是不屑一顾,认为他们根本就没有领会C++的精华,或者不太懂C++,现在我接触perl, php,

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com