C++学习笔记(八)string类

学会了string类,自己就不用建字符串类了
string类
1、string类是模板类:

typedef basic_string<char> string;

使用string类要包含头文件
2、string对象的初始化

string s1("hello");
string s2(8,'xs');
string s3 = "world";

错误的方式:

string error1 = 'hello';  // 错误是因为这种形式赋字符串
string error2('world');
string error3(8);
string error4 = 22;

可以将字符赋值给string对象

string s;
s = 'a';

3、string类的成员函数
(1)、string类对象长度用成员函数length()可读取
(2)、string类对象支持数据流运算符

string str("Hello World");
cout<<str<<endl;
cin>>str;

(3)、string对象支持getline函数

string s
getline(cin,s);

4、string的赋值与连接
(1)、用=赋值

string s1,s2;
s1 = s2;

=运算符已经被重载
(2)、用assign成员函数复制

string s1("hello"),s2;
s2.assign(s1);

(3)、用assign成员函数部分复制

string s1("Hello World"),s3;
s3.assign(s1,1,3)  //在s1的下标为1的字符开始复制3个字符给s3

注:复制语句两个数字一组,第一个代表位置,第二个代表复制多少
(4)、单个字符复制

s2[1] = s1[3] = 'a';

(5)、逐个访问string对象中的字符

string s1("Hello");
for(i = 0, i < s1.length,i++)
{
	cout<<s1.at(i)<<endl;
}

at成员函数会做范围检查,若超出范围,会给出out_of_range异常,而[ ]不会做范围检查
(6)、用+运算符连接字符串

string s1("Hello "),s2("World");
s1 += s2;
cout<<s1<<endl;
string s1("World"),s2("Hello ");
s1.append(s2);
cout<<s1;
s1.append(s2,1,s2.size());//s1.size s1的字符数,size与length相同
// 从s2下标为1开始复制size个字符,若字符串没有这么多字符,则复制到字符串最后一个字符

5、string类的比较
用==,>=,<=,>,<,!=
返回的是bool类型,成立返回true,否则返回false
也可用成员函数compare比较string

string s1("hello"),s2("s")
s1.compare(s2);  // 相同返回0,大于返回1,小于返回-1.

6、子串:用成员函数substr生成子串

string s1("Hello World"),s2;
s2 = s1.substr(4,5)  // 在s1的下标为4的位置复制5个字符  我搞不懂这个和复制有啥区别。。。

7、交换string:使用swap成员函数

string s1("Hello"),s2("world");
s1.swap(s2);

8、查找string中的字符
1、从头往后找:find()

string s1("asd");
s1.find("as");

在s1中从前往后查找"as"出现的第一次位置。如果找到,返回"a"位置,若没找到,返回string::npos(string中定义的静态常量)
2、从后往前找:rfind()

string s1("asd");
s1.rfind("as");
s1.rfind("as", 2)从下标为2的开始找

s1从后往前查找,"as"第一次出现的位置,找到,返回"a"的下标,若找不到,返回string::npos
3、查找一个字符串的任意一个字符:find_first_of

string s1("aaaa");
s1.first_find_of("abcd");

在s1中查找"abcd"字符串的任意一个字符出现的位置,若有就返回这个字符第一次出现的位置。
4、查找一个字符串的任意一个字符:find_last_of

string s1("aaaa");
s1.first_last_of("abcd");

和上面类似,只不过是返回这个字符最后一次出现的位置。
注:若是有多个,就按被查字符串的字符顺序。
5、查找不在字符串内的字母的位置:find_first_not_of()
从前往后查找,给出的字符串中不在(“abcd”)中的字符,返回第一次出现的位置。
6、查找不在字符串内的字母的位置:find_last_not_of()
从后往前查找,给出的字符串中不在(“abcd”)中的字符,返回第一次出现的位置。
7、删除string类中的字符:erase();

string s2("Hello World");
s2.erase(5);  // 去掉下标5及以后的字符

8、替换string类中的字符:replace();

string s1("Hello World");
s1.replace(2,3,"Hello");  // 将s1中下标2开始3个字符换成了"Hello" 

注:这个函数可以改变string对象的大小
9、string中插入字符:insert();

string s1("Hello"),s2("World");
s1.insert(2,s2);  // 将s2插入到s1的下标为2的位置
s1.insert(2,s2,3,4)  // 将s2的下标为3开始的4个字符插入到,s1的下标2的位置

10、转换成c语言式char *字符串:c_str
11、字符串拷贝:copy()

s1.copy(s2,0,5);
s2[5] = 0;

从s1的下标0的位置开始制作一个长度为5的字符串,并把它赋给s2,返回值表明实际复制字符串的长度。
12、字符串流处理
除了标准输入输出流和文件输入输出流外,还可以进行string流输入输出。
使用istringstream,ostringstream进行字符串的输入输出,也称内存输入输出。
头文件为

ostringstream outputstring(output)
int a = 10;
outputstring<<"this"<<a<<endl;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值