字符串(string)
1、头文件的调用:
#include<string>//必下,有时还要用cstring或string.h库
//如果下了iostream库,string就不用下
2、输入与输出:
(1)用getline读入:
先下库:
#include<iostream>//getline()和cin要调用该库
#include<cstring>
using namespace std;//不打就错
代码实现:
string a;
getline(cin,a);//用getline读string,读到'\n'为止,但不保留'\n'
(2)用流进行读、写操作:
cin>>a;//读到空格为止
cout<<a;//如实输出a内所有信息(包括printf()也是如此)
(3)用C语言函数:
string a;
scanf("%s",a.c_str());//读入
printf("%s",a.c_str());//输出
注:一般情况下不要用
4.字符串的大小和长度函数
(1)size()和length()
函数size()和length()两者等效,它们的类型是无符号整数的size_type,要转成 int类型后才能与整数比较。
(2)empty()
empty()函数用来检查字符串是否为空,或 s==””。
注:empty()在为空时返回true
5.元素存取
我们可以使用下标操作符[]和函数at()对字符串包含的字符进行访问。如a[3],访问字符串中的第4个字符(第一个字符的下标是 0)
但是应该注意的是操作符[]并不检查索引是否有效(有效索引为0~str.length()-1),如果访问的下标越界,不会提示越界出错。而at()会帮我们检查越界错误。
6.比较函数
字符串有大小之分,按英文字典的序区分大小,字符串间可以直接比较大小。C++字符串支持常见的比较操作符(>,>=,<,<=,==,!=)
7.更改字符串内容
字符串变量间的赋值可以直接使用“=”。
string 有很多函数用于插入(insert)、删除(erase)、替换(replace)、添加字符。
(1)增加字符(这里说的增加是在末尾上),命令有 +、append()、push_back()。
举例如下:
s=s+ch;//字符串的拼接和添加内容,我们通常都使用“+”连接符
s+=str;//加个字符串
s+="my name is jiayp";//加个C字符串
s+='a';//加个字符
要注意:字符串刚定义起来是空的,不能用 s[i] ='a'类似的赋值语句,因为第i都不存在。
字符串内容的拼接和添加我们基本都用"+"符号,string还提供了s.append(str)和s.push_back('a')进行内容的添加,如
s.append("my name is jiayp");
s.append(5,'x'); //添加5个字母x
(2)插入
有时需要在string中间的某个位置插入字符串,这时候你可以用insert()函数,这个函数需要你指定一个安插位置的索引,被插入的字符串将放在这个索引开始的后面。
a.insert(0,"my name");//"my name"内容从0下标开始
a.insert(1,str);//str内容从1下标开始
(3)删除与替换
删除函数erase(),替换函数 replace()。举例:
string s="you are good!"
s.replace(8,5,"the bset!");//从索引8开始的5个字符被替换,s="you are the bset!"
s.erase(13);//从索引13开始往后全删除
s.erase(7,5);//从索引7开始往后删5个
5.提取子串和字符串连接
提取子串的函数是:substr()。
举例:
s.substr(); //返回 s 的全部内容
s.substr(5);//从索引5开始的所有内容 s.substr(7,6); //从7开始连续6个字符
8.搜索与查找
查找函数很多,功能也很强大,包括了:
s1.find(s2)//在字符串s1中查找s2,返回第一次找到的位置
s1.find(s2,x)//在字符串s1中从x位置开始查找s2,返回第一次找到的位置
s1.rfind(s2);//在字符串s1中从右边查找s2,返回第一次找到的位置
s1.rfind(s2,x)//在字符串s1中从右边x位置开始查找s2,返回第一次找到的位置
这些函数返回符合搜索条件的字符区间内的第一个字符的索引,没找到目标就返回npos(转成int类型后它的值为-1)。npos的类型是size_type,其实是一个无符号整数。find函数返回的索引值就是size_type型,要直接和整数比较必须要转换成int类型。如:
if(int(s.find("the"))==-1)
或
if(int(s.find("the"))>=n)
9.C++字符串和C字符串的转换
由C++字符串得到对应的c_string的方法是c_str()和copy(),其中c_str()返回一个以‘\0’结尾的字符数组,而copy()则把字符串的内容复制或写入既有的c_string 或字符数组内。C++字符串并不以'\0'结尾。我的建议是在程序中能使用C++字符串就使用,除非万不得已不选用c_string。C 字符串不能直接用+号连接,这是错的:
s="data"+a;
应当写成:
s="data";
s=s+a//s是string类型,a是char类型。
课外知识:通过字符串流实现各种类型互转
通过使用
stringstream ss;
int i;
string s;
ss<<i;
ss>>s;//可以把任意类似的内容输出给ss ,然后输给任意类型的变量,实现了各种类型间的转换。
但如果要在程序中用同一个流,每次需要用 ss.clear()清除状态信息
反复读写大量的数据,将会造成大量的内存消耗,因此有时候,需要适时地清除一下缓存(用ss.str(""))。

浙公网安备 33010602011771号