c++ primer plus学习笔记复合类型之string类简介

本文介绍C++中的字符串处理方法,包括使用string类进行初始化、赋值、拼接等操作,对比string类与传统C风格字符串的区别,以及如何利用string类简化字符串处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

c++98通过添加string类扩展了c++库,现在可以用string类型的变量而不是字符串数组来存储字符串,使用起来比c风格的字符数组更简单。注:使用string类,必须包含头文件string。string位于名称空间std中,因此必须提供一条using编译指令。

1:使用string对象的方式与使用字符串数组的相同之处

  • 使用c-风格字符串来初始化string对象 ,比如,string str="panther";
  • 使用cin来将单个字符串通过键盘输入存储到string对象中,比如,string str1;cin>>str1;
  • 使用cout来显示string字对象,比如,string str="panther";cout<<str<<endl;
  • 使用数组表示法来访问存储在string对象中的字符串,比如,string str="panther";cout<<str[2]<<endl;
2:使用string对象的方式与使用字符串数组的不同之处

  • 主要区别是可以将string对象声明为简单变量,而不是数组,比如,string str1;  string str2="pan";
  • 类设计让程序自动处理string的大小,比如,string str1;str1的声明使得程序创建一个长度为0的string对象,但当程序将输入读取到str1中时,将自动调整str1的长度。cin>>str1;
从理论上说,c-风格char数组视为一组用于存储一个字符串的char存储单元,而string类变量是一个表示字符串的实体。

3:c++11字符串初始化,允许将列表初始化用于c-风格字符串和string对象

char first_date[]={"fh"};
char second_date[] {"fh"};
string third_date={"hf"};
string fourth_date {"hf"};

4:string对象的赋值、拼接和附加操作,使用string类时,某些操作比使用数组要简单很多。
赋值:不能将一个数组赋给另一个数组,但可以将一个string对象赋给另一个string对象。
比如,
char charr1[20];
char charr2[20]="sugar";
string str1;
string str2="pand";
charr1=charr2;//无效的
str1=str2;//有效的
拼接:运算符+将两个string对象合并起来
比如,
string str;
str=str1+str2;
附加:运算符+=将字符串附加到string对象的末尾
比如,
str1 +=str2;//将str2添加到str1的末尾
5:string类的其他操作
在c++新增string类之前,也要完成给字符串赋值,拼接等工作。对于这种c-风格字符串,一般程序员使用c语言库中的函数来完成任务。库函数包含在头文件cstring中,使用时必须包含(以前为string.h)。
比如,strcpy()函数将字符串复制到字符数组中,strcat()函数将字符串附加到字符数组末尾。程序如下:
#include <iostream>
#include <string>//使得string类有效
#include <cstring>//c-风格字符库
using namespace std;
int main()
{
	char charr[30];
	char charr1[20];
	char charr2[20]="sss";
	string str;
	string str1;
	string str2="ppp";

	//字符串赋值操作
	str1=str2;
	strcpy(charr1,charr2);
	//字符串附加操作
	str1 += "A";
	strcat(charr1,"A");
	//字符串拼接操作
	str=str1+str2;
	strcpy(charr,charr1);
	strcat(charr,charr2);
	//字符串长度
	int len1=str1.size();
	int len2=strlen(charr1);

	cout<<charr<<"   "<<charr1<<"   "<<charr2<<endl;
	cout<<str<<"   "<<str1<<"   "<<str2<<endl;
	cout<<"The string "<<str1<<" contains "<<len1<<" characters"<<endl;
	cout<<"The string "<<charr1<<" contains "<<len2<<" characters"<<endl;

	return 0;
} 

从程序中可以看出,string对象比c-风格字符串使用更简单,并且在使用数组时,总是存在目标数组过小,无法确定存储信息的危险,而string对象具有自动调整大小的功能,从而避免这种问题的发生。
给出另一种字符串操作,确定字符串中字符数
//字符串长度
int len1=str1.size();
int len2=strlen(charr1);
strlen()是一个常规函数,接受一个c-风格字符串作为参数,并返回该字符串包含的字符数。str1是一个string对象,而size()是string类的一个方法。总之c函数使用参数来指出要使用哪个字符串,而c++string类对象使用对象名和句点运算符来指出使用哪个字符串。
6:string类I/O
string类和c-风格字符串都可以用cin读取单个字符串,当需要读取整行时,string使用的句法相比c-风格字符串有所不同。
  • cin.getline(charr,20);    //c-风格字符串:将一行代码读取到数组中
  • getline(cin,str);             //string对象:将一行代码读取到string对象中
7:其他形式的字符串字面值
除了char类型外,c++还有类型
wchar_t  a[]=L"He is a good guy";
chart16_t b[]=u"She is a good girl";
chart32_t  c[]=U"Super man Super man";

可以创建这些类型的数组和字符串字面值。对于这些类型的字符串字面值,c++分别使用前缀L、u、U表示。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值