0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++字符串string

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2023-07-10 00:26 次阅读

1.string类简介

string是C++编程语言中的字符串。在C++中字符串处理可以使用c语言字符串形式char *,也可以使用string类格式。

string 是一个类,类内有char *指针,通过容器方式管理字符串。使用string类型需要需要包含头文件string。

2.string类的构造函数

string类提供了多种构造函数,支持无参构造、有参构造、拷贝构造。

无参构造:
string()  
有参构造:string(const char *str);
拷贝构造
:string(const string &str);
初始化字符串为count个c字符:string(int count,char c);

使用示例:

#include < iostream >
#include < string >
using namespace std;
void test()
{
	string s1;//默认构造,即无参构造函数
	char const* str = "hello,world";//c语言字符穿
	string s2(str);//传入C语言字符串
	cout < < "s2=" < 
wKgaomSqwICAA6-pAAK9VNfkJnU317.png

3.string类赋值相关函数

string类中提供"="运算符重载和assign全局函数进行赋值操。这两种方式均有多个重载版本,如下所示:

string字符串赋值
string &operator=(const char *s);//将c字符串赋给string
string &operator=(const string &s);//将s赋值给string
string &operator=(char c);//将字符c赋给string
//全局函数
string &assign(const char *s);//将c字符串赋给string
string &assign(const char *s,int n);//将c字符串前n个赋给string
string &assign(const string &s);//将s赋给string
string &assign(int n,char c);//将n个c赋给string

使用示例:

#include < iostream >
using namespace std;
#include < string >
void test()
{
	string s1="hello,world";//c语言字符串赋值
	cout < < "s1=" < < s1 < < endl;
	string s2 = s1;//将s1赋给s2
	cout < < "s2=" < < s2 < < endl;
	string s3 ;//单个字符赋给string
	s3 = 'c';
	cout < <"s3="< 
wKgaomSqwWmAFeV0AAIlrwTEwq0242.png

4.string类字符串拼接

string类中字符串拼接有重载"+="运算和全局函数append方式,均有多种重载版本。

运算符重载
string &operator+=(const char *s);////将s追加到string
string &operator+=(const string &str);//将str追加到string
string &operator+=(const char c);//将字符c追加到string
全局函数append
string &append(const char *s);//将s追加到string
string &append(const char *s,int n);//将s的前n个追加到string
string &append(const string &str);//等价于operator+=(const string &str)
string &append(const string &str,int pos,int n); --从str的第pos位置开始,取出n个字符追加到string中

使用示例:

void test()
{
	//+=运算符重载示例
	string s1 = "C++";
	s1 += "学习";
	s1 += ',';
	cout < < "s1=" < < s1 < < endl;
	string s2 = "学习使我快乐!";
	s1 += s2;
	cout < < "s1=" < < s1 < < endl;
	//append示例
	string s3;
	s3 = "C++";
	s3.append("学习");

	s3.append(s2,4);//从s2的第4个字符开始,将s2的字符拼接到s3
	cout < < "s3=" < < s3 < < endl;
	s3.append(s2, 4,4);
	cout < < "s3=" < < s3 < < endl;//从s2的第4个字符开始,将s2的接下来4个字符拼接到s3
	s3.append("月入过万!");
	cout < < "s3=" < < s3 < < endl;
	s3.append("我的未来不是梦",4,10);//从第4个位置开始截取10个字符拼接到s3
	cout < < "s3=" < < s3 < < endl;
}
int main()
{
	test();
	system("pause");
}
wKgZomSqwjyAAdpMAAKZmJlCIUk800.png

5.字符串查找与替换

string字符串查找有find、rfind函数。其中find函数是从左往右查找,查找成功返回第一个出现的下标,失败返回-1;rfind是查找最后一个出现的下标,失败返回-1。 replace函数实现字符串替换。

//find函数:从左往右查找
返回值:查找成功返回出现的位置,失败返回-1
int find(const string&str,int pos=0)const;//形参pos表示开始查找的起始位置
int find(const char *str,int pos=0)const;
int find(const char *str,int pos=0,int n)const;//从str的第pos开始的前n个字符中str出现的位置
int find(const char c,int pos=0);//查找字符c
//rfind函数:从右往左查找
int rfind(const string &str,int pos=npos);从pos位置开始查找str最后一次出现的位置
int rfind(const char *str,int pos=npos);从pos位置开始查找str最后一次出现的位置
int rfind(const char *str,int pos=pos,int n);从pos开始的前n个字符中str最后一次出现的位置
int rfind(const char c,int pos=0);//查找c最后一次出现的位置
//字符串替换
string &replace(int pos,int n,const string &s);//将字符串的第pos位置开始的n个字符替换成s
string &replace(int pos,int n,const char *s);

使用示例:

#include < iostream >
#include < string >
using namespace std;
void test()
{
	string str = "1asd3as456asd4789asd";
	int pos = str.find("asd");//查找asd第一次出现的位置
	cout < < "pos=" < < pos < < endl;
	string temp = "asd";
	pos = str.find(temp,7);//从第7个位置开始查找asd出现的位置
	cout < < "pos=" < < pos < < endl;

	pos = str.rfind(temp);//查找最后一次出现的位置
	cout < < "pos=" < < pos < < endl;
	pos = str.rfind("asd",7,2);//从第3个位置开始往前查找,查找"asd"中的前2个字符在str中最后一次位置
	cout < < "pos=" < < pos < < endl;
	//字符串替换
	str.replace(1, 7, "c++");//从第一个位值开始将str的7个字符替换为c++
	cout < < "str=" < < str < < endl;
}
int main()
{
	test();
	system("pause");
}
wKgaomSqw1GAavHcAAMeFfb75Lo647.png

6.字符串比较

string类中字符串比较函compare数由多个重载版本,既可以和C语言风格const char *字符串进行比较,也可以和string类字符串进行比较。相等返回0,不相等返回!0值。

字符串比较:
int compare(const char *str);//相等返回0,否则返回非0值
//比较string的len个字符,从idx位置开始
int string::compare (size_type idx, size_type len, const string& str) const
//从指定位置指定长度开始比较
int string::compare (size_type idx, size_type len, const string&str, size_type str_idx, size_type str_len) const

使用示例:

#include < iostream >
using namespace std;
#include < string >
void test()
{
	string str1 = "hello,world";
	if (str1 == "hello,world")
	{
		cout < < "[const char *]相等" < < endl;
	}
	string str2 = "hello,world";
	if (str1 == str2)
	{
		cout < < "[string]相等" < < endl;
	}
	if (!str1.compare("hello,world"))
	{
		cout < < "[compare]相等" < < endl;
	}
	//比较str1的前6个字符
	int ret=str1.compare(0,6,"hello,");
	cout < < "ret=" < < ret < < endl;
	//从str1的第0个开始开始取出6个字符,
	//从"c++,hello,"的第4个位置开始,取出6个字符进行比较
	ret = str1.compare(0, 6, "c++,hello,", 4, 6);
	cout < < "ret=" < < ret < < endl;
}
int main()
{
	test();
	system("pause");
}
wKgZomSqxGWAQGaUAAJlt4QiE8o833.png

7.string字符串以字符方式读写

string类字符串使用字符方式访问,可以使用重载"[]"版本函数,即可以和C语言中访问方式一样,也可以使用函数at来访问。

string类中对于字符串的长度获取,可以使用size()函数或者length()函数来实现。

string以字符方式访问
	char &operator[](int n);
	char &at(int n);
string 中获取字符串长度
	str.size();
	str.length();

使用示例:

#include < iostream >
#include < string >
using namespace std;
void test()
{
	string str = "hello,world";
	cout < < "str长度:" < < str.size() < < endl;
	cout < < "str长度:" < < str.length() < < endl;
	//修改成员
	for (int i = 0; i < str.size(); i++)
	{
		str[i] = i+'0';
	}
	//遍历
	for (int i = 0; i < str.size(); i++)
	{
		cout < < str.at(i) < < " ";
	}
	cout < < endl;
}
int main()
{
	test();
	system("pause");
}
wKgZomSqxXWAWiX3AAHNa5Z8Ff8254.png

8.string字符串的插入与删除

string类中插入函数insert支持多种插入方式,有多个重载版本。

字符串删除可以使用erease函数实现。

c++插入:
string& insert(int pos,const char *s);//从第pos位置开始插入s
string& insert(int pos,const string &s);

string &insert(int p0, const char *s, int n);//从p0位置开始插入s,插入的s连续n个字符
string &insert(int p0,const string &s, int pos, int n);//从p0位置开始插入s,插入的s从pos开始,连续n个字符

string &insert(int p0, int n, char c);//从p0处插入n个字符c

c++删除字符串
string &erase(int pos,int n=npos);//从pos位置开始删除n个字符

使用示例:

#include < iostream >
#include < string >
using namespace std;
void test()
{
	string str = "hello,";
	str.insert(2,"aaa");//从第2个位置开始插入aaa
	cout < < "str=" < < str < < endl;
	str.insert(4, "1234", 1, 2);//从第4个位置插入,从"1234"的第1个位置开始,练习两个字符插入到str中
	cout < < "str=" < < str < < endl;

	//字符串删除
	str.erase(2,4);//从第2个位置开始,删除4个字符
	cout < < "str=" < < str < < endl;
	str.erase();//清空字符串
	cout < < "str=" < < str < <"t长度:"< ()< 
wKgZomSqxi6AVvZJAAKGeGuHEG4532.png

9.子字符串提取

string类中对于子字符串的提取,可以使用函数substr实现。

判断string类字符串是否为空,即长度是否为0可以使用empty函数实现。

子字符串提取
string substr(int pos=0,int n=npos)const;//从pos位置提取n个子字符
//判断字符串是否为空
bool empty();

使用示例:

wKgZomSqxp6AWpiFAAIBZEx4jZU077.png

10.string类转换为char *

将string字符串转换为char *字符串,可以使用c_str函数实现。

const char *c_str();
const char *data();
在c11版本之后,这两个函数功能一致,都是将string类型字符串转换成char *,返回一个char *字符串,以'�'结尾。

使用示例:

#include < iostream >
#include < string >
using namespace std;
int main()
{
	string str = "hello,world";
	const char* p = str.c_str();
	cout < < "p=" < < p < < endl;
	p = str.data();
	cout < < "p=" < < p < < endl;
	system("pause");
}
wKgZomSq33iAcHnsAAFBNkMtYHw370.png

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33108
  • 字符串
    +关注

    关注

    1

    文章

    551

    浏览量

    20126
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • string
    +关注

    关注

    0

    文章

    40

    浏览量

    4645
收藏 人收藏

    评论

    相关推荐

    C语言字符串函数详解

    , int c);查找字符c字符串string中首次出现的位置, NULL结束符也包含在查找中.返回一个指针, 指向
    发表于 06-23 23:33

    在Labivew里字符串String)转为为字符(Char)数组。

    在Labivew里字符串String)转为为字符(Char)。 我原来以为,这个函数应该有的,结果竟然没有, 只要多动一番手脚了。如下图:
    发表于 09-29 10:23

    Linux Shell系列教程之Shell字符串用法

    对于字符串的操作如下表格所示:[td]表达式含义${#string}$string的长度${string:position}在$string
    发表于 08-29 16:01

    如何实现字符串函数?

    你好 我使用STM8S发现套件和标准固件库。我需要使用字符串函数,如strtok()。如何让这些功能在这种环境中工作。包括string.h不会工作。我需要实现字符串函数还是有更简单的方法?以上
    发表于 07-09 08:37

    LABVIEW 字符串变成字符数组

    怎么把一个字符串变成一个字符数组 ? 比如String "abc" 变成string[]{"a","b","c"}这种
    发表于 04-21 18:02

    字符串拆分

    串口连续传来如是字符串”V-12.98C0.18“希望把字符串拆分为V后的为一组数,C后的为一组数。上述字符串应该拆为-12.98和0.18
    发表于 05-22 11:57

    请问JavaScript字符串对象String是什么?

    字符串对象 String 提供了对字符串进行处理的属性和方法
    发表于 11-05 06:39

    string字符串和char*/char[]型型字符串的区别 相关资料分享

    概念区分在c中,是没有string类型的数据的。但是c语言里有这个头文件。容易让人误认为c中有string类型的数据。区分
    发表于 07-05 07:27

    LabVIEW编程LabVIEW开发 字符串对列String Queue PtByPt CYCk 例程与相关资料

    LabVIEW编程LabVIEW开发 字符串对列String Queue PtByPt CYCk 例程与相关资料Creates a string queue用于实现创建并保留最近的若干个字符串
    发表于 12-05 20:24

    字符串字符数组的转换字符数组介绍

    字符串字符数组的转换字符数组 -----》字符串1:直接在构造String时转换。char[] data = {‘a’, ‘b’, ‘
    发表于 01-12 07:01

    C++字符串为什么被解释为回退字符

    我正在使用 TGX v4.16.0。我描述的所有工作都是使用 MSVS 中的 TGX 模拟器完成的。我正在从 C 字符数组构建本机 C++ 字符串。然后我将获取这些
    发表于 01-04 06:38

    字符串string对象操作的全面总结

        字符串操作看似简单,其实非常重要,不注意的话,经常出现代码运行结果和自己想要的不一致,甚至崩溃。本文总结了一些构建string对象方法、修改string对象的方法、string
    的头像 发表于 11-11 11:23 1717次阅读
    <b class='flag-5'>字符串</b><b class='flag-5'>string</b>对象操作的全面总结

    C++入门之string

    前一篇文章我们已经了解了C++中的基本类型,C++还提供了很多抽象数据类型,例如字符串stringstring包含多个
    的头像 发表于 03-17 13:58 353次阅读

    鸿蒙TypeScript学习第10天:【String字符串)】

    String 对象用于处理文本(字符串)。
    的头像 发表于 04-08 14:32 220次阅读
    鸿蒙TypeScript学习第10天:【<b class='flag-5'>String</b>(<b class='flag-5'>字符串</b>)】