C++字符串处理

字符串处理


一小部分借鉴了别人的博客。

C++里的字符串的效率不高,常数很大,所以建议尽量少用。但我觉得,如果时间可以下来,尽量用字符串,因为,字符串太方便了,可以直接加,和比较,删除也会自动补齐,比字符型数组好多了(但是慢多了)。自从学了C++,第一感觉是C++比pascal方便多了,第二每当做的关于字符串的题目,也怀念起pascal了。

字符串常用命令

string s;//定义

命令 例子 作用
+ x+y 将y接在x后面,返回新的字符串的值。
<,>,==,<=,>=,!= x< y 按位比较x,y的大小关系(和整形判断一样),返回bool类型值。
= x=y 赋值,将y的值付给x。
find() s.find(s1,pos) 字符串s从pos开始(包括pos)匹配,返回第一个查找到的第一个字符的位置。若找不到,返回string::npos。
empty() s.empty() 返回bool类型值,判断s是否为空。
size() s.size() 返回int类型值,字符串s的长度。
length() s.length() 和size(),一样,可以互换。
erase() s.erase(pos,len) 字符串s从pos开始(包括pos),删除len个字符。
substr() s.substr(pos,len) 返回字符串s从pos开始(包括pos)的len个字符。
replace() s.replace(pos,len,s1) 将字符串s从pos开始(包括pos)的len个字符替换成s1。
insert() s.insert(pos,s1) 将字符串s1插入字符串s第pos个位置之前
clear() s.clear() 清空字符串,也可以s=”“(双引号)。
swap() s.swap(s1) 将s和s1交换。
c_str() printf(“%s”,s.c_str); 用scanf和printf时要用到,将字符串转成字符型数组。

常用的就这些,其他其实用不用无所谓(我从没用过,感觉用不上)。
初学者还要注意:
”(单引号):中间是字符。
“”(双引号):中间是字符串。

字符串的读入命令

常用的有:scanf,cin,getline

命令 例子 作用
scanf() scanf(“%s”,s.c_str()); 在读人字符串时不是很方便,要加.c_str(),遇空格就停。
cin cin>>s; 十分方便,也是遇空格就停。
getline() getline(cin,s) 整行读入,遇换行符停止。

以上方法均很慢(scanf相对快很多),数据一大,读入超时,所以建议用字符型数组读入,然后转成字符串,或用scanf。

结束符

C++中的字符型数组是一定要有结束符,ANSI码对应的就是0。如果不加结束符,字符型数组输出就会出错,不信,你试试。
结束符可以用’\0’或EOF来表示。

字符串转成字符型数组

C ++提供的由C++字符串得到对应的C_string的方法是使用data()、c_str()和copy(),

命令 作用
data() 以字符数组的形式返回字符串内容,但末尾’\0’(结束符)。
c_str() 返回一个以‘\0’结尾的字符数组
copy() 则把字符串的内容复制或写入既有的c_string或字符数组内。

C++字符串并不以’\0’结尾。

字符串与文件

我们常用的开文件是

freopen("a.in""r",stdin);

如果我们希望开的文件名存在s这个字符串了,那么就得这么写

freopen(s.c_str(),"r",stdin);

如果你要用C++编一些小东西的话,这的确挺实用的。
我经常去写些坑人的东西,就怎么看,在人家不知不觉中,电脑内存就炸了QWQ(我称之为核弹,来源于同学中的某某某)。

字符串的应用相当广泛,用法也相当的多,待日后更新吧!

喜欢就加个关注哦

posted @ 2017-12-22 12:33  XSamsara  阅读(535)  评论(0编辑  收藏  举报