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类和字符串的主要内容,如果未能解决你的问题,请参考以下文章