C++ string类型变量的定义

C++ 中提供了一个 string 内建数据类型,它可以替代 C 语言中的 char* 数组。使用 string 数据类型时,需要在程序中包含头文件<string>

string 类型处理起来会比较方便,下面我们将逐一介绍该类型的功能。

【例 1】
#include <iostream>
#include <string>
using namespace std;

int main()
{
    string s1;
    string s2 = "string";
    string s3 = s2;
    string s4 (10, 's');
    return 0;
}
本例中介绍了几种定义 string 类型变量的方法:
  • 变量 s1 只是定义但是没有进行初始化,系统会将默认值赋给 s1,默认值是“”(空字符串);
  • 变量 s2 在定义的时候就被初始化为了 "string",与 C 风格的 char 型数组不同,string 类型的变量结尾是没有 '\0' 的,string 类型的本质是一个 string 类,而我们定义的变量则是一个个的 string 类的对象;
  • 变量 s3 在定义的时候直接用 s2 进行初始化了,因此 s3 的内容也是 "string";
  • 变量 s4 初始化为 10 个 's' 字符组成的字符串,也即 "ssssssssss"。

从例 1 中我们可以看出,string 类型变量可以直接通过赋值操作符“=”进行赋值,可以用 string 类型变量或 C 风格字符串进行赋值。例如,s2 是用一个字符串常量进行初始化的,而 s3 变量则是通过 s2 变量进行初始化。

与 C 风格的字符数组不同,当我们需要知道字符串长度时,string 类为我们提供了 length() 函数。如下面例 2 所示,我们可以通过 s 变量来调用 length() 函数,从而返回 s 变量的长度。因为 string 类型的变量末尾是没有 '\0' 字符的,因此其返回值就是变量的真实长度,而不是长度 +1。

【例 2】
string s = "string";
int len = s.length();

转换为 char 数组字符串

虽然 C++ 提供了 string 类型来替代 C 语言中的 char* 字符串,但程序设计过程中还是不可避免地会碰到用 char* 字符串的地方。为此,系统为我们提供了一个转换函数 c_str(),该函数将 string 类型的变量转换为一个 const 的字符串数组的指针。

【例 3】
string filename = "input.txt";
ifstream in;
in.open(filename.c_str());
本例中,我们为了打开文件的 open() 函数,必须将 string 类型变量转换为字符串指针。