C++ string类详解

本文深入探讨C++中的string类,包括其概述、构造函数、字符串输入、字符操作、特性描述、赋值、连接、比较、子串、交换、迭代器处理、插入、删除、查找和替换等功能。详细讲解了每个函数的用法和实例。

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

本文前面主要介绍了C++字符串string类。本文综合了《c++ string类的使用方法》《c++ String 类函数详解》的内容,并加上一些自己其他的补充。

C++ string类概述

C++提供了一种新的数据类型:字符串类型(string类型),在使用方法上,它和char,int类型一样,可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列。

实际上,string并不是C++ 语言本身具有的基本数据类型(而char,int,float,double等是C++本身提供的基本类型),它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对象。

头文件

在使用string类的定义变量时,必须在本文件的开头将C++标准库中的string头文件包含进来,即应加上

#include <string> \\ 注意这里头文件名不是string.h

定义字符串变量和构造函数

定义字符串变量
string str;

这样我们就定义了一个字符串变量,但既然是一个类,就有构造函数和析构函数。上面的声明没有传入参数,所以就直接使用了string的默认的构造函数,这个函数所作的就是把str初始化为一个空字符串。

string类的主要构造函数
  • string(const char* s)   //用字符串常量或字符数组来构造新字符串;
  • string(const string& str)   //拷贝构造函数,用str拷贝构造新字符串;
  • string(const char* s, unsigned n)   //用字符串常量或字符数组的前n个字符来构造新字符串;
  • string(unsigned n, char c)  //将字符c复制n次来构造新字符串;
  • string(const string& str, unsigned pos, unsigned n)   //将str以pos位置(从0开始的字符串下标)开始的字符开始的n个字符构造新字符串;若无参数n,则默认从pos位置开始到str结束构造新字符串。

例子:

#include <iostream>  
#include <string>  
using namespace std;  
int main()  
{  
    char name[]="Bill Gates";  
    string s1,s2("Steven Jobs");  //s2=Steven Jobs
    string s3(s2);                //s3=Steven Jobs
    string s4(name,4);            //s4=Bill
    string s5(s2,7,3);            //s5=Job
    string s6(s2,7);              //s6=Jobs
    string s7(5,'c');             //s7=ccccc
    return 0;  
}  

字符串输入

string头文件中还定义了 getline() 函数用于输入string字符串,函数原型有两个重载形式:

istream& getline ( istream& is, string& str);//默认以换行符结束
istream& getline ( istream& is, string& str, char delim);

getline的第一个函数参数为输入流对象; 第二个为待输入的字符串; 第三个是可选参数, 为自定义的终止符, 当输入到该字符时表示输入完成, 程序只保存终止符前的输入内容, 当省略时默认以’\n’为终止符。需要说明的是, 终止符不会保存到输入的字符串中去。

有关于c++的输入方法总结请参考:http://blog.jobbole.com/108440/
https://blog.csdn.net/k346k346/article/details/48213811

string类的字符操作

const char &operator[](int n)const;
const char &at(int n)const;
char &operator[](int n);
char &at(int n);

operator[]和at()均返回当前字符串中第n个字符的位置,但at函数提供范围检查,当越界时会抛出out_of_range异常,下标运算符[]不提供检查访问。

const char *data()const;//返回一个非null终止的c字符数组
const char *c_str()const;//返回一个以null终止的c字符串
int copy(char *s, int n, int pos = 0) const;//把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目

copy()函数从string类型对象中至多复制count个字符到字符指针s指向的空间中。默认从首字符开始,但是也可以指定,开始的位置(记住从0开始)。返回真正从对象中复制的字符。用户要确保p指向的空间足够保存n个字符。

s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值