C++string类——string修饰符、操作、非成员函数

2024-09-01 19:04

本文主要是介绍C++string类——string修饰符、操作、非成员函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、Modifiers(修饰符):

1、operator+=

这个成员函数给一个string类类型的对象进行追加,在现有的string后面追加string类、字符串或者字符;

代码示例:

void test1()
{std::string s1("Hello ");std::cout << s1 << std::endl;//operator+= 追加s1 += "world";s1 += '!';std::cout << s1 << std::endl;std::string s2("Welcome!");s1 += s2;std::cout << s1 << std::endl;
}

2、append(追加)

这个成员函数也是在string后面追加;

(1)追加string类;(2)追加一个string类的一部分(从下标subpos开始到sublen个字符结束);(3)追加一个字符串;(4)追加一个字符串的前n个字符;(5)追加n个字符c;(6)追加一个string类的一部分,利用迭代器指明起始位置。

代码示例:

void test2()
{std::string s1("Who ");std::string s2("are *******");const char* s3 = "you";s1.append(s2, 0, 4);//4表示追加4个字符s1.append(s3);s1.append(1,'?');std::cout << s1 << std::endl;
}

3、push_back

给string类类型的字符串追加一个字符;

代码示例:

void test3()
{std::string s1("Good ");char c1 = 'L';char c2 = 'u';char c3 = 'c';char c4 = 'k';char c5 = '!';s1.push_back(c1);std::cout << s1 << std::endl;s1.push_back(c2);std::cout << s1 << std::endl;s1.push_back(c3);std::cout << s1 << std::endl;s1.push_back(c4);std::cout << s1 << std::endl;s1.push_back(c5);std::cout << s1 << std::endl;}

4、assign

 将内容分配给字符串;

 代码示例:

test(4)
{std::string str;std::string base = "The quick brown fox jumps over a lazy dog.";str.assign(base);std::cout << str << "\n";str.assign(base, 10, 9);//从第10个位置开始,向后扫描9个字符,assign进去std::cout << str << "\n";str.assign("programs are cool", 7);//字符串的前7个std::cout << str << "\n";str.assign("c-string");std::cout << str << "\n";str.assign(10, '*');std::cout << str << "\n";str.assign(base.begin() + 16, base.end() - 12);std::cout << str << "\n";
}

5、insert

在指定的下标位置之前插入字符串、字符或者string类; pos代表指定的下标位置;

代码示例:

void test5()
{std::string str = "Wrold";std::string s1 = "Hello ";str.insert(0, s1);std::cout << str << "\n";str.insert(str.size(), 1, '!');std::cout << str << "\n";
}

6、erase

删除string类对象里面的一部分字符; (1)默认从第一个字符开始,默认删除整个string类对象。传参控制删除的区间;(2)删除从p开始之后的内容;(3)利用迭代器指定区间(左闭右开),删除;

代码示例:

void test6()
{std::string str("There is nothing.");std::cout << str << "\n";str.erase(9);//从下标为9的字符删除完std::cout << str << std::endl;str.erase(str.begin(), str.end() - 3);std::cout << str << "\n";str.erase(str.begin() + 1);std::cout << str << "\n";
}

7、replace

对于一个string类对象,指定它某一个字符下标为起始位置,扫描len个长度的字符,替换成给出的字符串、字符、string类; 迭代器指定的区域左闭右开;

代码示例:

void test7()
{std::string str("xxxxx_yyyyy");str.replace(0, 3, "y");std::cout << str << std::endl;str.replace(str.begin() + 4, str.end(), "x");std::cout << str << std::endl;
}

8、swap

交换两个string类对象 ;

代码示例:

void test8()
{std::string s1("xxx");std::string s2("***");s1.swap(s2);std::cout << s1 << "\n" << s2 << std::endl;
}

9、pop_back

尾删一个string类对象的一个字符;

代码示例:

{std::string str("ABCDEFG");str.pop_back();str.pop_back();std::cout << str << std::endl;
}


二、string类对象操作

1、c_str

用来接收一个string的对象指针,这个指针指向字符串开头的位置,返回一个const char* 的指针;

代码示例:

void test1()
{string str("This is an apple");const char* cstr = str.c_str();cout << cstr << endl;cout << str<< endl;
}

2、data

与c_str用法类似 ;

3、copy

拷贝一个string类对象的一个子串给一个由s指向的字符串;从pos开始拷贝,拷贝len个字符,若是stirng不够拷贝,那就拷贝整个stirng类对象;

代码示例:

//copy
void test2()
{string str("everything is nice");char buffer[20];size_t _length = str.copy(buffer,10,0);buffer[_length] = '\0';cout << buffer << endl;
}

 4、find

从一个string类对象里面找字符串、字符或者string对象,找到了返回开始匹配的下标;没有找到返回string::npos

(3)意为从string的pos1下标开始找,找与s里面前n个开始匹配的位置;

代码示例:

//find
void test3()
{string str("Hello World!");size_t pos1 = str.find('!', 0);size_t pos2 = str.find("Hello", 0);string str2("World");size_t pos3 = str.find(str2, 0);cout << pos1 << " " << pos2 << " " << pos3 << endl;size_t pos4 = str.find(" World", 0, 3);cout << pos4 << endl;
}

5、refind

和find原理相同,只是从最后倒着开始找;

6、find_first_of 和find_last_of

find_first_of 意为按正向顺序查早,查找string类中与给出的查找对象中任意字符匹配的下标; 

代码示例:

//find_first_of
void test4()
{string str("Please, replace the vowels in this sentence by asterisks.");size_t pos = str.find_first_of("aeiou");//从下标为0处开始,在str中找与"aeiou"中任意字符匹配的下标while (pos!= string::npos){str[pos] = '*';pos = str.find_first_of("aeiou", pos + 1);//指明开始查找的位置,以免重复查找已查找的位置}//最后str里面的"aeiou"全部被替换成'*'cout << str << endl;
}

find_last_of和 find_first_of原理相同,只是从后面开始查找起;

7、find_first_not_of 和find_last_not_of  

查找string类中不为给出查找对象中任意字符的位置;

代码示例:

void test5()
{string str("Please, replace the vowels in this sentence by asterisks.");size_t pos = str.find_first_not_of("aeiou");while (pos != string::npos){str[pos] = '*';pos = str.find_first_not_of("aeiou", pos + 1);}cout << str << endl;
}

 find_last_not_of从后面开始查找

8、substr

从一个string对象中拷贝一个子串,从pos开始拷贝,拷贝len个字符,返回string类的子串

代码示例:

void test6()
{string str("What a nice day!");string _substr = str.substr(0, 10);cout << _substr << endl;
}


三、string类模板中的非成员函数

成员函数默认第一个参数是this指针,传参时也不能改变,而有些函数的传参第一个实参不一定是this指针指向的对象,因此要将这些函数定义在类外,方便传参;

1、operator+

此函数可以将string、字符或者字符串之间相加;

代码实现:

//operator+
void test7()
{string str = "www";const char* s1 = "cplusplus";char i = '.';string s2 = "com";string rsl;rsl = str + i + s1 + i + s2;cout << rsl << endl;
}

 

2、relational operators

此函数中定义了string对象之间的比较;

代码示例:

//relational operators
void test8()
{// string comparisonsstd::string foo = "alpha";std::string bar = "beta";if (foo == bar) std::cout << "foo and bar are equal\n";if (foo != bar) std::cout << "foo and bar are not equal\n";if (foo < bar) std::cout << "foo is less than bar\n";if (foo > bar) std::cout << "foo is greater than bar\n";if (foo <= bar) std::cout << "foo is less than or equal to bar\n";if (foo >= bar) std::cout << "foo is greater than or equal to bar\n";
}

 3、swap

交换两个string类对象:

4、operator<< 和 operator>>

重载输出和输入函数;

第一个参数是cout或者cin,这也符合代码标准输入输出流的书写;

代码示例:

//operator<< 、operator>>
void test9()
{string str;cin >> str;cout << str;cout << endl;string str2 = "ancd";cout << str2;
}

5、getline

此函数是输入string的;对于一般的输入cin来说,碰见空格就说明输入完成,但是有些情况要把空格以及空格之后的字符也算成这个string类;

一般来说(也就是(2)),碰见'\n'也就是换行就会终止;若是在第三个参数指明了终止的字符,那么就一直读取,直到碰见这个指定的字符才结束;

getline不会读取结束标志的字符,而是将它作为'\0'读取进入string;

代码示例: 

	string str1;cout << "输入一个字符串:";//输入一个含空字符的字符串,cin只能读取空字符前面的内容cin >> str1;cout << str1 << endl;

  只能读取空字符前面的内容;

	cout << "输入一个字符串:";string str2;getline(cin, str2);//默认碰见'\n'结束cout << str2;

getline遇到换行符结束;

	cout << "输入一个字符串:";string str3;getline(cin, str3, 'Z');//指定碰见'Z'结束cout << "**********************";cout << str3;

 碰见'Z',才结束读取,换行符也读;

这篇关于C++string类——string修饰符、操作、非成员函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1127786

相关文章

0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型的操作流程

《0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeekR1模型的操作流程》DeepSeekR1模型凭借其强大的自然语言处理能力,在未来具有广阔的应用前景,有望在多个领域发... 目录0基础租个硬件玩deepseek,蓝耘元生代智算云|本地部署DeepSeek R1模型,3步搞定一个应

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

使用C++将处理后的信号保存为PNG和TIFF格式

《使用C++将处理后的信号保存为PNG和TIFF格式》在信号处理领域,我们常常需要将处理结果以图像的形式保存下来,方便后续分析和展示,C++提供了多种库来处理图像数据,本文将介绍如何使用stb_ima... 目录1. PNG格式保存使用stb_imagephp_write库1.1 安装和包含库1.2 代码解

C++实现封装的顺序表的操作与实践

《C++实现封装的顺序表的操作与实践》在程序设计中,顺序表是一种常见的线性数据结构,通常用于存储具有固定顺序的元素,与链表不同,顺序表中的元素是连续存储的,因此访问速度较快,但插入和删除操作的效率可能... 目录一、顺序表的基本概念二、顺序表类的设计1. 顺序表类的成员变量2. 构造函数和析构函数三、顺序表

使用C++实现单链表的操作与实践

《使用C++实现单链表的操作与实践》在程序设计中,链表是一种常见的数据结构,特别是在动态数据管理、频繁插入和删除元素的场景中,链表相比于数组,具有更高的灵活性和高效性,尤其是在需要频繁修改数据结构的应... 目录一、单链表的基本概念二、单链表类的设计1. 节点的定义2. 链表的类定义三、单链表的操作实现四、

Python利用自带模块实现屏幕像素高效操作

《Python利用自带模块实现屏幕像素高效操作》这篇文章主要为大家详细介绍了Python如何利用自带模块实现屏幕像素高效操作,文中的示例代码讲解详,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、获取屏幕放缩比例2、获取屏幕指定坐标处像素颜色3、一个简单的使用案例4、总结1、获取屏幕放缩比例from

通过prometheus监控Tomcat运行状态的操作流程

《通过prometheus监控Tomcat运行状态的操作流程》文章介绍了如何安装和配置Tomcat,并使用Prometheus和TomcatExporter来监控Tomcat的运行状态,文章详细讲解了... 目录Tomcat安装配置以及prometheus监控Tomcat一. 安装并配置tomcat1、安装