string基本字符系列容器

二、string基本字符系列容器

简介:C语言只提供了一个char类型来处理字符,而对于字符串,只能通过字符串数组来处理,显得十分不方便。C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,它提供了添加、删除、替换、查找和比较等丰富的方法。string对象的元素下标也是从0开始的。
其中vector< char >这样的向量也可以处理字符串,但其功能比不上string。向量的元素类型可以是string,如vector< string >这样的向量,实际上就类似于C语言中的字符串数组。使用string容器,需要在头文件声明, #include< string >。

函数方法总结:

1,从string对象尾部添加字符 采用 “+” 操作符
2,从string对象尾部追加字符串
❶直接采用“+”操作符
❷采用append()方法
3,给string对象插入字符 insert();
4,访问string对象的元素,一般使用下标方法随机访问string对象的元素,下标是从0开始计数的;string对象的元素是一个字符(char)
5,删除string对象的元素
❶清空一个字符串,直接给它赋值为 空字符串 即可
❷使用clear();方法删除string对象的所有元素
❸使用erase();方法删除迭代器所指的那个元素或一个区间中的所有元素。
6,返回string对象的长度
❶返回字符串的长度 length();
❷返回字符串是否为空 empty();(bool类型)
7,替换string对象的字符 replace();
8,搜索string对象的元素或子串 find();
9,string对象的比较 compare(); (它比对方大返回1,相等返回0,小于对方返回-1)
10,反向排序string对象 reserve();
(使用reserve方法需要声明头文件 #include < algorithm>)
11,string对象作为vector向量的元素,类似于字符串数组
12,string类型的数字化处理
13,string对象与字符数组互操作
14,string对象与sscanf函数
15,string对象与数值相互转换

1,string基本字符系列容器的一些基本操作
#include <iostream>
#include<string>
#include<stdio.h>//使用C语言中的scanf函数
using namespace std;int main()
{string s;   //创建一个空字符串对象s,其长度为0cout << s.length() << " ";cout << endl;string s1;s1="beyondwsq"; //直接给字符串对象s1赋值cout << s1 << " ";cout << endl;string s2;char ss2[100];//cin >> ss2;scanf("%s",&ss2);//scanf的输入速度要比cin快得多,但是scanf是C语言的函数,不支持string对象,需要头文件 #include<stdio.h>//手动输入一个字符串到字符数组ss2里面s2=ss2;//将字符数组ss2里面的元素赋值给string类型的s2cout << s2 << " ";//输出s2这个字符串cout << endl;return 0;
}
2,一些函数方法的使用
#include <iostream>
#include<string>
using namespace std;int main()
{//使用 + 操作符从string对象尾部追加字符串string s;s =s + 'a';s =s + 'b';s =s + 'c'; //不能简写成 s=+'c';  这样的话只能输出最后一个字符cout << s << " "; //这里若简写成 s=s+'...' 的话只能输出最后一个字符,我也不知道为什么???cout << endl;//输出结果:abc//使用 + 操作符从string对象尾部追加字符串string s1;s1 = s1 + "wsq";s1 = s1 + "1014";cout << s1 << " ";cout << endl;//输出结果:wsq1014//采用append()方法从string对象尾部追加字符串string s2;s2.append("yy");s2.append("1202");cout << s2 << " ";cout << endl;//输出结果:yy1210//采用insert()方法给string对象插入字符string s3;s3 = "787084934";string :: iterator it;  //定义迭代器it = s3.begin();    //迭代器位置为字符串首s3.insert(it+1,'Q');    //把字符'Q'插入到第二个字符的位置,即下标为1这个位置cout << s3 << " ";cout << endl;//输出结果:7Q87084934//访问string对象的元素string s4;s4 = "beyondwsq1014";cout << s4[0] << " ";   //输出string对象s4的首元素cout <<endl;cout << s4[0]-'b' << " ";   //两个相同的字符相减值为0cout <<endl;//输出结果:b  0return 0;
}
3,删除string对象的元素
#include <iostream>
#include<string>
using namespace std;int main()
{string s;s="beyondwsq1014";string :: iterator it = s.begin();  //定义迭代器it,指向字符串对象首元素s.erase(it+3);  //删除下标为3的元素,即第4个源0cout << s << endl;//输出结果为:beyndwsq1014s.erase(it,it+4);   // 删除下标为[0~4)直接的所有元素,即 元素 beyncout << s << endl;//输出结果为:dwsq1014//s="";   //清空字符串长度s.clear();  //清空字符串长度,这两种方法效果一样cout << s.length() <<" ";  //输出字符串的长度cout << s.empty() <<endl;  //判断字符串是否为空,若我为空,返回1;不为空返回0//输出结果为:0 0return 0;
}
4,替换、搜索、比较string对象的元素
#include <iostream>
#include<string>
using namespace std;int main()
{//替换string对象的字符string s;s="beyondwsq1014";s.replace(3,4,"sole");  //从下标为3的元素开始,之后的连续的4个字符也就是下标为[3,6]的元素ondw,替换成“good”cout << s << endl;//输出结果为:beysolesq104//搜索string对象的元素或子串string s1;s1 = "Never give up";cout << s1.find('e') << " ";    //查找第一个字符'e',返回其下标值cout << s1.find("up") <<" ";    //查找第一个字符串"up",返回第一个元素(u)的下标值cout << s1.find("are") <<endl;    //查找第一个字符串"are",返回其下标值,查找不到则返回4294967295//输出结果:1 11 4294967295//string对象的比较string s2;s2 = "xi ha xi ha";cout  << s2.compare("xi") <<" ";    //前两个元素一样,但是s2的元素多,所以s2大,返回其他多余的元素的总个数,这里除了“xi”以外,还有9个元素,故返回9cout  << s2.compare("xi ha xi ha") <<" ";   //相等,返回0cout  << s2.compare("zz") <<endl;    //x没有z大,故返回-1//输出结果:9 0 -1return 0;
}
5,reserve反向排序string对象
#include <iostream>
#include<string>
#include<algorithm> //使用reverse函数方法需要声明头文件
using namespace std;int main()
{string s;s = "10141202";reverse(s.begin(),s.end()); //从string对象s的开始到结尾这个区间内,所以的元素进行反排序cout << s << " ";//输出结果:20214101return 0;
}
6,string类型容器的其他功能
#include <iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<algorithm>
#include<stdio.h>   //这里要用到C语言中的scanf函数
using namespace std;int main()
{vector < string > v;v.push_back("hjj");v.push_back("xgz");v.push_back("ysrwsq");cout << v[0] <<" ";cout << v[1] <<" ";cout << v[2] <<endl;//输出结果:hjj xqz ysrwsqcout << v[0][0] <<" ";cout << v[1][1] <<" ";cout << v[2][2] <<endl;//输出结果:h j rcout << v[2].length() <<endl;//输出结果:6//string类型的数字化处理//求一个整数各个位之和,例如12345   输出结果为(1+2+3+4+5):15string s;s = "787084934";int sum=0;for(int i=0;i<s.length();i++){if(s[i] == '0') sum+=0;else if(s[i] == '1') sum+=1;else if(s[i] == '2') sum+=2;else if(s[i] == '3') sum+=3;else if(s[i] == '4') sum+=4;else if(s[i] == '5') sum+=5;else if(s[i] == '6') sum+=6;else if(s[i] == '7') sum+=7;else if(s[i] == '8') sum+=8;else if(s[i] == '9') sum+=9;}cout << sum <<endl;//输出结果:50//string对象与字符数组互操作string s1;char ss1[100];scanf("%s",&ss1);s1=ss1;printf(s1.c_str());cout << endl;cout << ss1 <<endl;printf("%s",ss1);cout << endl;cout << s1 <<endl;cout << ss1 <<endl;printf("%s",ss1);cout << endl;//输出结果:若111 则输出111五次,每行一次return 0;
}
7,string对象与sscanf函数(可以把一个字符串按你需要的方式分离出子串,甚至是数字)
#include <iostream>
#include <string>
using namespace std;int main()
{string s1,s2,s3;char sa[50],sb[50],sc[50];sscanf("abc 123 sq ","%s %s %s",sa,sb,sc);s1=sa;s2=sb;s3=sc;cout << s1 <<" "<<s2 <<" "<<s3<<endl;cout << "Hello world!" << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正则表达式(一)

正则表达式概述 1.1什么是正则表达式&#xff1f; 正则表达式(Regular Expression)起源于人类神经系统的早期研究。神经生理学家Warren McCulloch和Walter Pitts研究出一种使用数学方式描述神经网络的方法。1956年&#xff0c;数学家Stephen Kleene发表了一篇标题为“神经…

42.有“舍”才有“得”

大干世界&#xff0c;万种诱惑&#xff0c;什么都想要&#xff0c;会累死你&#xff0c;该放就放&#xff0c;该舍就舍。人必须先有所舍&#xff0c;才能有所得&#xff0c;舍如同种子撒播出去&#xff0c;转了一圈&#xff0c;又带了一大群子子孙孙回来。“舍”永远在“得”的…

Java StringBuilder codePointCount()方法与示例

StringBuilder类codePointCount()方法 (StringBuilder Class codePointCount() method) codePointCount() method is available in java.lang package. codePointCount()方法在java.lang包中可用。 codePointCount() method is used to count the number of Unicode code point…

FreeRTOS时间管理

在使用FreeRTOS的过程中&#xff0c;我们通常会在一个任务函数中使用延时函数对这个任务延时&#xff0c;当执行延时函数的时候就会进行任务切换&#xff0c;并且此任务就会进入阻塞太&#xff0c;直到延时完成&#xff0c;任务重新进入就绪态。延时函数舒属于FreeRTOS的时间管…

set和multiset集合容器

三、①set集合容器 简介&#xff1a;set集合的目的就是为了快速检索。set集合容器实现了红黑树的平衡二叉检索树的数据结构。set集合里面不允许有重复的元素出现&#xff1b;使用set容器前&#xff0c;需要在程序的头文件中声明 #include < set >。 函数方法总结&#…

javascript获取select的值全解

获取显示的汉字 document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text 获取数据库中的id window.document.getElementById("bigclass").value 获取select组分配的索引id window.docume…

Java File类void deleteOnExit()方法(带示例)

文件类void deleteOnExit() (File Class void deleteOnExit()) This method is available in package java.io.File.deleteOnExit(). 软件包java.io.File.deleteOnExit()中提供了此方法。 This method is used to delete the file or directory when the virtual machine termi…

FreeRTOS队列

在实际应用中&#xff0c;我们会遇到一个任务或者中断服务需要和另一个任务进行消息传递&#xff0c;FreeRTOS提供了队列的机制来完成任务与任务、任务与中断之间的消息传递。 0x01 队列简介 队列是为了任务与任务、任务与中断之间的通信而准备的&#xff0c;可以在任务与任务…

括号配对问题(C)

描述 现在&#xff0c;有一行括号序列&#xff0c;请你检查这行括号是否配对。 输入 第一行输入一个数N&#xff08;0<N<100&#xff09;,表示有N组测试数据。后面的N行输入多组输入数据&#xff0c;每组输入数据都是一个字符串S(S的长度小于10000&#xff0c;且S不是空串…

剧情介绍:“阿甘正传”

阿甘是个智商只有75的低能儿。在学校里为了躲避别的孩子的欺侮&#xff0c;听从一个朋友珍妮的话而开始“跑”。他跑着躲避别人的捉弄。在中学时&#xff0c;他为了躲避别人而跑进了一所学校的橄榄球场&#xff0c;就这样跑进了大学。阿甘被破格录取&#xff0c;并成了橄榄球巨…

java 方法 示例_Java集合syncedList()方法与示例

java 方法 示例集合类syncList()方法 (Collections Class synchronizedList() method) synchronizedList() method is available in java.util package. syncList()方法在java.util包中可用。 synchronizedList() method is used to return the synchronized view of the given…

FreeRTOS信号量---二值信号量

信号量可以用来进行资源管理和任务同步&#xff0c;FreeRTOS中信号量又分为二值信号量、计算型信号量、互斥信号量和递归互斥信号量。 0x01 二值信号量 二值信号量其实就是一个只有一个队列项的队列&#xff0c;这个特殊的队列要么是满的&#xff0c;要么是空的&#xff0c;任…

Linux 上 rpm包管理工具的基本使用

查询是否安装某个包&#xff1a;rpm -q 包名查询所有已安装的包&#xff1a;rpm -q a查询未安装包的文件信息&#xff1a;rpm -qilp 未安装的包安装包&#xff1a;rpm -i 包测试安装包&#xff1a;rpm -i test 包删除包&#xff1a;rpm -e 包名测试删除包&#xff1a;rpm -e te…

ios 内存使用陷阱

在iphone开发过程中&#xff0c;代码中的内存泄露我们很容易用内存检测工具leaks 检测出来&#xff0c;并一一改之&#xff0c;但有些是因为ios 的缺陷和用法上的错误&#xff0c;leaks 检测工具并不能检测出来&#xff0c;你只会看到大量的内存被使用&#xff0c;最后收到didR…

FreeRTOS软件定时器

软件定时器允许设置一段时间&#xff0c;当设置的时间达到后就执行指定的功能函数&#xff0c;被软件定时器调用的功能函数叫做定时器的回调函数。软件定时器的回调函数是在定时器服务任务中执行的&#xff0c;所以一定不能在回调函数中调用任何阻塞任务的API函数&#xff0c;比…

Java类class isAssignableFrom()方法及示例

类class isAssignableFrom()方法 (Class class isAssignableFrom() method) isAssignableFrom() method is available in java.lang package. isAssignableFrom()方法在java.lang包中可用。 isAssignableFrom() method is used to check whether the class or an interface den…

关于 列表实例

wss3.0工具中有个列表实例项目。此项目的作用是在自定义网站或自定义字段时使用默认值。也就是定义其默认的数据。 格式详见微软msdn&#xff1a;http://msdn.microsoft.com/zh-cn/library/ms478860.aspx转载于:https://www.cnblogs.com/heavencloud/archive/2009/03/20/141793…

WP7之Application Bar控件

Microsoft.Phone.Shell命名空间中定义了ApplicationBar及其相关类&#xff08;ApplicationBarIconButton和ApplicationBarMenuItem&#xff09;&#xff0c;这些类派生自Object,并完全独立于常规Silverlight编程中的DependencyObject,UIElement和FrameworkElement类层次结构。A…

TomCat使用以及端口号被占用的处理方法

一.HTTP协议 什么是HTTP协议 HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是因特网上应用最为广泛的一种网络传输协议&#xff0c;所有的WWW文件都必须遵守这个标准。 HTTP请求 HTTP响应 2.如何处理端口被占用 方法一&#xff…

FreeRTOS事件标志组

使用信号量来同步的话&#xff0c;任务只能与单个事务或任务进行同步&#xff0c;有时候某个任务可能会需要与多个事件或任务进行同步&#xff0c;此时信号量就无能为力了&#xff0c;FreeRTOS为此提供了一个可选的解决方法&#xff0c;那就是事件标志组。 0x01 事件标志组 事…