☰
【c++】c语言入门到c++使用高手:深入学习C++之基本语言(七)
2026/10/23 4:03:08 网站建设 项目流程

第二章 基本语言

第七节 string类型介绍

1. 前言

  • c++标准库: string, vector

  • string: 可变长字符串的处理, vector是一种集合或者容器的概念

2. string类型简介

  • c++标准库中的类型, 代表一个可变长字符串

  • string这个类型可以看成一个类类型(类似于struct)

3. 定义和初始化string对象

  • 5种初始化方式
#include<iostream>#include<string>using namespace std;intmain(){// 默认初始化, s1="":空串, 表示里边没有字符string s1;// 把字符串"I am Felaim!"这个字符串内容拷贝到了s2代表的一段内存中// 拷贝时不包括末尾的\0string s2="I am Felaim!";// 和s2的写法一样string s3{"I am Felaim!"};// 直接把s2中的内容拷贝到了s4所代表的一段内存中string s4=s2;// aaaaaa,把s5初始化为连续num个字符,'a'组成的字符串// 这种方式不太推荐,因为会在系统内部创建临时对象intnum=6;strings5(num,'a');return0;}

4. string对象上的操作

  • 判断是否为空empty(),返回的布尔值
#include<iostream>#include<string>using namespace std;intmain(){// 默认初始化, s1="":空串, 表示里边没有字符string s1;if(s1.empty()){cout<<"s1 is empty!"<<endl;}return0;}
  • size()/length():返回字节/字符数量, 代表字符串的长度 unsigned int
#include<iostream>#include<string>using namespace std;intmain(){// 默认初始化, s1="":空串, 表示里边没有字符string s1;cout<<s1.size()<<endl;//0cout<<s1.length()<<endl;//0s1="中国";cout<<s1.size()<<endl;//6cout<<s1.length()<<endl;//6s1="ff";cout<<s1.size()<<endl;//2cout<<s1.length()<<endl;//2s1="I am Felaim";cout<<s1.size()<<endl;//11cout<<s1.length()<<endl;//11return0;}
  • s[n]:返回s中的第n个字符(n个整型值),n代表的是一个位置,位置从0开始,到size()-1
    如果不小心用下标n超过了对应的范围,或者访问空字符串,都会导致结果不可控
#include<iostream>#include<string>using namespace std;intmain(){string s1="I am Felaim";;if(s1.size()>5){cout<<s1[5]<<endl;s1[5]='9';cout<<s1<<endl;}return0;}
  • s1+s2:字符串的连接,返回连接后的结果,其实就是得到一个新的string对象
#include<iostream>#include<string>using namespace std;intmain(){string s1="I am Felaim!";;string s2="hahahaha";string s3=s1+s2;cout<<s3<<endl;return0;}
  • s1 = s2;字符串对象的赋值,用s2里面的内容取代s1里面的内容
#include<iostream>#include<string>using namespace std;intmain(){string s1="I am Felaim!";;string s2="hahaha";s1=s2;cout<<s1<<endl;return0;}
  • s1 == s2,判断两个字符串是否相等,大小写敏感:也就是大小写字符是不同的两个字符 abc不等于Abc,
    相等:长度相同,字符也得全部相同
#include<iostream>#include<string>using namespace std;intmain(){string s1="HAHAHA";;string s2="hahaha";if(s1==s2){cout<<"s1 = s2"<<endl;}else{cout<<"s1 != s2"<<endl;}return0;}
  • s1 != s2: 判断两个字符串不相等
#include<iostream>#include<string>using namespace std;intmain(){string s1="HAHAHA";;string s2="hahaha";if(s1!=s2){cout<<"s1 != s2"<<endl;}else{cout<<"s1 = s2"<<endl;}return0;}
  • s.c_str():返回一个字符串s中的内容指针,返回一个指向正规的c字符串的指针常量,也就是以\0结尾,这个函数的引入是为了与字符串兼容,在c语言中没有string类型,所以通过string类对象的c_str()成员函数,把string对象转换成c语言中的字符串样式
#include<iostream>#include<string>#include<cstring>using namespace std;intmain(){string s1="HAHAHA";;string s2="hahaha";constchar*p=s1.c_str();charstr[100];strcpy(str,p);// linux 不能用这个函数?// strcpy_s(str, sizeof(str), p);cout<<str<<endl;// 这也是一种初始话方式string s3{str};cout<<s3<<endl;string s4=str;cout<<s4<<endl;return0;}
  • 读写string对象
#include<iostream>#include<string>#include<cstring>using namespace std;intmain(){string s1;// 空格会被截断掉cin>>s1;cout<<s1<<endl;return0;}
  • 字面值和string相加+
#include<iostream>#include<string>using namespace std;intmain(){string s1="abc";string s2="defg";string s3=s1+" and "+s2+'c';cout<<s3<<endl;//abc and defgc// 这种方式不可行,语法不允许// string s4 = "12" + "dd";// 中间加一个string类型就可以使用(隐式类型转换)string s4="12"+s1+"dd";//可行string s5="dd"+s1+"12"+"dd";//不可行// string s5 = "dd" + "12" + s1 + "dd";return0;}
  • 范围for针对string的使用,c++11中提供了范围for,能够遍历一个序列中的每一个元素
#include<iostream>#include<string>using namespace std;intmain(){string s1="I am Felaim!";// auto 变量类型自动推动for(autoc:s1){cout<<c;}cout<<endl;for(auto&c:s1){// 转成大写字符c=toupper(c);}cout<<s1<<endl;return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询