C++类型的增删改查(2)--string

摘要

C++入门 bool、引用 string类的增删改查

3.bool和引用

3.1 bool类型

只有truefalse两个值,所有非零值为true,零值为false,与python的区别是它的字母是全小写

1
bool flag = true;

3.2 引用

C++中使用&作为引用符,区别于取址算符

1
2
3
int a;
int &ra = a;//定义引用ra,它是变量a的引用,即别名
//此时 ra = 1; 等效于 a = 1;
在函数中使用引用可以直接对原值进行更改
1
2
3
4
5
6
7
void fun(int &a){
a = 1;
}
int main(){
int num = 0;
fun(num);//num变为1
}

4.string类

4.1 简介

C中处理字符串通常使用char数组,而string类通过cincout实现输入输出,并支持许多算法。使用方法

1
2
3
4
5
6
7
8
9
10
#include <string>

string s = "hello world";//直接初始化
string s1 = s; //使用另一个string初始化
string s2 = s1 + s; //两个string拼接
string s3(4, 'c'); //使用n个字符初始化
string s4("hello", 2); //将字符串的前n个字符赋值给s4
string s5(s2, 2, 2); //将s2从pos位置开始的len长度字符串赋值给s5
string s6(s2, 2); //将s2从pos位置开始的子串赋值给s6
string s7(s2.begin(), s2.end()); //将s2某个区间的子串赋值给s7

4.2 增

  1. 使用cin输入
1
cin >> s;
  1. 使用.resize()实现scanf输入
1
2
3
string s;
s.resize(100);
scanf("%s",&s[0]);
  1. 使用getline()获得一行字符串(包括空格)
1
getline(cin, s);
  1. 使用.insert()插入字符
1
2
3
s1.insert(pos, "hello"); //从pos位置起,插入字符串
s2.insert(pos, n, 'c'); //从pos位置开始,增加n个字符
s2.insert(pos, s1, pos2, len); //从pos位置起,插入s1的从pos2开始的len长度字符串

注意pos和len都是整数类型的,下标从0开始

  1. 使用to_string()函数将其他类型转为string
1
2
3
int num = 123;
string s;
s = to_string(num);

4.3 删

  1. 使用.erase()清除字符
1
2
s.erase(pos, len); //删除从pos位置开始的n个字符
s.erase(s.begin(), s.begin()+2); //删除某个指定区间的元素
  1. 使用.clear()清空字符串
1
s.clear();

4.4 改

  1. 使用.replace()替换字符
1
2
3
s.replace(s.begin(), s.end(), "hello"); //替换指定区间内的字符
s4.replace(pos, len, "hello"); //替换从pos位置开始的len长度的字符串

  1. 使用transform()改变字符串(如大小写)

1
2
3
4
#include <algorithm>

transform(s3.begin(), s3.end(), s3.begin(), ::tolower);//改为小写
transform(s3.begin(), s3.end(), s3.begin(), ::toupper);//改为大写

4.5 查

  1. 使用cout查看
1
cout << s;
  1. 使用.c_str()实现printf输出
1
printf("%s\n",s.c_str());
  1. 使用.length()/ .size()获取长度
1
cout << s.length();
  1. 使用.substr()获取子串/实现切片
1
2
s2 = s.substr(pos); //从下标pos开始到末尾
s3 = s.substr(pos,len); //下标pos开始截取len个字符
  1. 使用.find()获取字符或字符串位置
1
s.find(str or char,pos)

返回int类型

  1. 直接使用下标参看字符串对应字符
1
cout << s[0] << endl;
  1. 比较两个字符串
1
2
3
s.compare(s2);
s.compare(pos,n1,s2); //让s中从pos下标位置开始的n1个字符与s2做比较
s.compare(pos1,n1,s2,pos2,n2); //让s中从pos1下标位置开始的n1个字符与s2中从pos2开始的n2个字符相比较

按acsii码排序,>时返回1,<时返回-1,==时返回0

区分大小写,小写字母>大写字母>数字

  1. 使用.empty()判断是否为空
1
s.empty();

空字符串返回1,非空返回0。

如字符串.resize()过,即为非空