C++学习36 string类和字符串

Posted 白宫飘红旗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++学习36 string类和字符串相关的知识,希望对你有一定的参考价值。

C++大大增强了对字符串的支持,除了可以使用C风格的字符串,还可以使用内置的数据类型 string。string 类处理起字符串来会方便很多,完全可以代替C语言中的 char 数组或 char 指针。

使用 string 类需要包含头文件 <string>,下面我们逐一介绍该类的功能。

string 的几种用法:

#include <iostream>
#include <string>
using namespace std;
int main(){
    string s1;
    string s2 = "c plus plus";
    string s3 = s2;
    string s4 (5, s);
    return 0;
}

本例介绍了几种定义 string 类型变量的方法。变量 s1 只是定义但没有初始化,编译器会将默认值赋给 s1,默认值是""(空字符串)。变量 s2 在定义的同时被初始化为"c plus plus"。与C风格的 char 字符串不同,string 类型的变量结尾没有 ‘\0‘,string 类型的本质是一个 string 类,而我们定义的变量则是一个个的 string 类的对象。变量 s3 在定义的时候直接用 s2 进行初始化,因此 s3 的内容也是"c plus plus"。变量 s4 被初始化为由 5 个 ‘s‘ 字符组成的字符串,也就是 "sssss"。

从上面的代码可以看出,string 变量可以直接通过赋值操作符“=”进行赋值。string 变量也可以用C风格的字符串进行赋值,例如,s2 是用一个字符串常量进行初始化的,而 s3 则是通过 s2 变量进行初始化的。

与C风格的字符串不同,当我们需要知道字符串长度时,可以调用 string 类提供的 length() 函数。如下所示:

string s = "c plus plus";
int len = s.length();
cout<<len<<endl;

这里,变量 s 也是 string 类的对象,length() 是它的成员函数。由于 string 变量的末尾没有 ‘\0‘ 字符,所以 length() 返回的是字符串的真实长度,而不是长度 +1。

转换为 char 数组字符串

虽然C++提供了 string 类来替代C语言中的 char 数组形式的字符串,但在编程中有时必须要使用C风格的字符串,为此,string 类为我们提供了一个转换函数 c_str(),该函数能够将 string 变量转换为一个 const 字符串数组的形式,并将指向该数组的指针返回。请看下面的代码:

string filename = "input.txt";
ifstream in;
in.open(filename.c_str());

为了使用文件打开函数 open(),必须将 string 类型的变量转换为字符串数组。

string 字符串的输入输出

string 类重载了输入输出运算符,可以像对待普通变量那样对待 string 类型变量,也就是用“>>”进行输入,用“<<”进行输出。请看下面的代码:

#include <iostream>
#include <string>
using namespace std;
int main(){
    string s;
    cin>>s;  //输入字符串
    cout<<s<<endl;  //输出字符串
    return 0;
}

虽然我们输入了两个由空格隔开的 "string",但是只输出了一个,这是因为输入运算符”>>“默认会忽略空格,遇到空格就认为输入结束,所以最后输入的 "string" 没有被存储到变量 s。

以上是关于C++学习36 string类和字符串的主要内容,如果未能解决你的问题,请参考以下文章

C++学习之旅第二站:类和对象进阶

学习:类和对象——初始化列表和内部类

C++学习37 string字符串的访问和拼接

类和字符串的C ++编译问题[重复]

更新:C++ 指针片段

C++学习43 输入输出有关的类和对象