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(我称之为核弹,来源于同学中的某某某)。
字符串的应用相当广泛,用法也相当的多,待日后更新吧!