本文前面主要介绍了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个字符。