字符串(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字符串流,把需要转换的信息输给它,然后从中提取信息,可完成各种类型的互转。如:

stringstream ss;
int i; 
string s; 
ss<<i;
ss>>s;//可以把任意类似的内容输出给ss ,然后输给任意类型的变量,实现了各种类型间的转换。

但如果要在程序中用同一个流,每次需要用 ss.clear()清除状态信息
反复读写大量的数据,将会造成大量的内存消耗,因此有时候,需要适时地清除一下缓存(用ss.str(""))。

posted @ 2020-12-13 11:26  VegetableChick  阅读(384)  评论(0)    收藏  举报