C/C++教程

C++常用STL容器--string

本文主要是介绍C++常用STL容器--string,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

C++常用STL容器--string

    • 特点
    • string构造函数
    • string赋值
    • string字符串拼接
    • string字符串查找、替换
    • string字符串比较
    • string字符获取
    • string 插入和删除
    • string 截取子串

string是C++风格的字符串,但本质上是一个类

特点

  • string类内部封装了很多成员方法,例如:查找find,拷贝cope,删除delete,替换replace
  • string管理char*所分配的内存,不用担心复制越界和取值越界等,由类内部进行负责

string构造函数

函数原型

  • string();//创建一个空的字符串

  • string(const char*s);//使用字符串s初始化

  • string(const string& str);//使用一个string对象初始化另一个string对象

  • string(int n,char c);//使用n个字符c初始化

示例

//1、默认构造
string s1;

//2、使用字符串str初始化
const char* str = "hello C++";
string s2(str);		

//3、使用一个string对象初始化另一个string对象
string s3(s2);
	
//4、使用5个字符a初始化,结果为"aaaaa"
string s4(5, 'a');	

string赋值

函数原型

  • =
  • .assign(str); //字符串赋值
  • .assign(str,n); //将str的前n个字符赋给当前字符串
  • .assign(n,elem); //用n个elem字符赋给当前字符串

示例

//1、将char*类型字符串赋值给当前字符串
string str1 = "hello world";

//2、string变量赋值
string str2 = str1;

//3、单个字符赋值
string str3='a';

//4、使用assign进行字符串赋值
string str4.assign("hello C++");

//5、将字符串的前5个字符赋给当前字符串,str5结果为"hello"
string str5.assign("hello C++",5);

//6、使用assign进行字符串赋值
strig str6.assign(str5);

//7、用5个字符赋给当前字符串,str7结果为"wwwww"
string str7.assign(5,'w');

string字符串拼接

函数原型

  • +=//string变量拼接
  • .append(str); //字符串拼接
  • .append(str,n);//将str的前n个字符赋给当前字符串

示例

//1、char*类型字符串拼接
string str1 = "hello";
str1 += "C++";

//2、string变量拼接
string str2 = "python";
str1 += str2;

//3、字符串拼接
string str3 = "i";
str3.append("love");

//4、将字符串的前3个字符赋给当前字符串,str3结果为i love c++"
str3.append("c++python",3);	//相当于str3.append("c++python",0,3)

//5、string变量拼接
str3.append(str2);

string字符串查找、替换

函数原型

  • .find(pos)//查找方法
  • .replace(pos,y,str)//替换方法

示例

//1、查找
string str1 = "abcdefgde";
int pos = str1.find("de");	//从左往右找,结果为3
pos = str1.rfind("de");		//从右往左找,结果为7

//2、替换
str1.replace(1,3,"1111");	//从1号位置起 3个字符替换为“1111”

注意:

  • find查找是从左往右,rfind从右往左
  • find找到字符串后返回查找的第一个字符位置,找不到返回-1
  • replace在替换时,要指定从哪个位置其,多少个字符,替换成什么样的字符串

string字符串比较

函数原型

  • .compare(str2)

实际上是将两个字符串中的字母的ascll值逐个对比,主要用于比较是否相等

示例

string str1 = "abc";
string str2 = "bbc";
if (str1.compare(str2) == 0){
	cout << "str1等于str2" << endl;
}
else if (str1.compare(str2) > 0){
    cout << "str1大于str2" << endl;
}
else{
    cout << "str1小于str2" << endl;
}

string字符获取

函数原型

  • [n]
  • .at(n)

两中方式均可以获取单个字符

示例

string str = "hello";
//1、通过[]访问单个字符,结果为"h e l l o"
for (int i=0; i<str.size(); i++){
    cout << str[1] << " ";
}

//2、通过at方式访问单个字符,结果为"h e l l o"
for (int i=0; i<str.size(); i++){
    cout << str.at(i) << " ";
}

//通过[]修改单个字符,结果为xello
str[0] = 'x';

//通过at修改单个字符,结果为xyllo
str.at(1) = 'y';

string 插入和删除

函数原型
插入方法:
.insert(pos,str)//在pos位置插入str字符串
.insert(pos,n,char c)//在pos位置插入n个字符c

删除方法:
.erase(pos,npos)//删除从pos位置到npos位置的字符串
示例

string str = "hello";
//插入,结果为"h111ello"
str.insert(1,"111");

//删除,结果为"hello"
str.erase(1,3);

string 截取子串

函数原型

  • .substr(pos,npos)//获取从pos位置到 npos-1位置的字符串

示例

string str = "abcdef";
//截取,结果为“bcd”
subStr = str.substr(1,3);


//实用操作,从邮件地址中获取 用户名信息
string email = "zhangsan@foxmail.com";
int pos = email.find("@");	//获取@符号位置,结果为8
string userName = email.substr(0,pos);	//获取从0到7的字符串
这篇关于C++常用STL容器--string的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!