string就是字符串的意思,是c++用来代替char数组的数据结构。里面封装了一些常用的方法,方便我们地对其进行一些操作,而且string的空间大小是动态变化的,大大减小了不必要的花销
2、string常用的输入方法(1)cin输入,遇到空格停止输入
代码示例:
#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s1,s2;//定义字符串s1、s2 cin>>s1;//输入一个字符串给s1 cin>>s2;//输入一个字符串给s2 cout<<"s1得到的值是: "< 输入:
hello world!运行结果:
s1得到的值是: hello s2得到的值是: world!(2)getline输入,遇到换行符停止输入
代码示例:#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s1,s2;//定义字符串s1、s2 getline(cin,s1);//输入一行字符串给s1 getline(cin,s2);//输入一行字符串给s2 cout<<"s1得到的值是: "< 输入:
hello world! happy every day!运行结果:
s1得到的值是: hello world! s2得到的值是: happy every day!值得注意的是:
cin输入会自动吃点前置换行和空格,即cin输入得到的不可能是空串。而getline不会吃掉换行符号,可能会使得输入出现意料之外的错误。
示例代码:#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s1,s2,s3;//定义字符串s1、s2、s3 cin>>s1; //输入一个字符串给s1 getline(cin,s2);//输入一行字符串给s2 getline(cin,s3);//输入一行字符串给s3 cout<<"s1得到的值是: "< cout<<"s2是空串" < cout<<"s2得到的值是: "< 输入:
hi! hello world!运行结果:
s1得到的值是: hi! s2是空串 s3得到的值是: hello world!解决的办法是多写一个getline,或者getchar()来达到吃掉多余的换行符字符:
示例代码:#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s1,s2,s3;//定义字符串s1、s2、s3 cin>>s1; //输入一个字符串给s1 getline(cin,s2);//输入一行字符串给s2 getline(cin,s3);//输入一行字符串给s3 cout<<"s1得到的值是: "< cout<<"s2是空串" < cout<<"s2得到的值是: "< 输入:
hi! hello world! happy every day!运行结果:
s1得到的值是: hi! s2得到的值是: hello world! s3得到的值是: happy every day!3、string常用的成员函数size()//获取字符串长度 insert()//插入字符串 append()//插入字符串 erase()//删除任意字符,时间复杂度O(n),n为字符串长度 substr()//截取字符字串 back()//获取最后一个字符 pop_back()//删除最后一个字符,时间复杂度O(1) empty()//判断是否为空 clear()//清空字符串示例代码:
#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s="a";//定义一个字符串并初始化 cout<<"string常用的三种插入方法:"< 运行结果
string常用的三种插入方法: 1、+号 s+="b"后:s=ab 2、insert() s.insert(2,"c")后:s=abc 3、append s.append("d")后:s=abcd 查看字符串大小 s.size()=4 截取字符串 s.substr(1,2)=bc 删除特定字符 s.erase(0,2)后: s=cd 删除最后一个字符 s.pop_back()后:s=c 两种判断字符串是否为空的方法 1、s.empty()等于1时即为空,等于0时非空 2、用s==判断,等于1时即为空,等于0时非空 s.empty() = 0 (s=="") = 0 两种清空字符串方法 1、s.clear() 2、s="" 清空后 s.empty() = 1 (s=="") = 14、string的大小比较string的比较是以逐个字母的ascii码进行比较的
示例代码:#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s1="abc"; string s2="acb"; // 先比较a和a,相等时再比较b和c,明显b s2){ cout< "< cout< cout< s2){ cout< "< cout< cout< s2){ cout< "< cout< cout< 运行结果:
abcbb bbc>bbbc 5、string的遍历方法
(1)下标遍历:通过下标随机访问逐个遍历。
示例代码:#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s="abcdefg"; for(int i=0;i cout< 运行结果:
abcdefg如果想逆序遍历呢?只需要逆向思考,从s.size()-1到0遍历即可
示例代码:#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s="abcdefg"; for(int i=s.size()-1;i>=0;i--){ cout< 运行结果:
gfedcba(2)foreach遍历
示例代码:#include//c++标准头文件,可以使用cout,cin等标准编译用法 using namespace std;//命名空间,防止重名给程序带来各种隐患,使用cin,cout,map,set,vector,queue时都要使用 int main(){ string s="abcdefg"; for(char c:s){ cout< 运行结果:
abcdefgforeach遍历方法在结构体的遍历中比较常用,因为其简单易写,但是有一个弊端就是不能逆序遍历。
是不是很简单呢?
刚接触肯定会觉得难,多些做题多些用,熟悉了就容易了,兄弟萌,加油!!!
文章尚有不足,欢迎大牛们指正
感谢观看,点个赞吧



