C++字符串流stringstream与string知识介绍与用法小结 | 您所在的位置:网站首页 › 输出stringstream › C++字符串流stringstream与string知识介绍与用法小结 |
大家好,又见面了,我是你们的朋友全栈君。 之前总结了C++的文件输出输入流的相关知识,通过介绍底层的streambuf缓冲区,从而与stringstream流(字符串流)联系了起来,本文就对此进行简单的介绍。 首先介绍string。 string 是 C++ 提供的字符串类,和 C 类型的字符串相比,除了有不限长度的优点外,还有其他许多方便的功能,其可以看成类似STL里vector数组的一种容器,可以方便的进行数据的增删改查,并可以进行排序、交换与遍历。要使用 string, 必须包含头文件string,并包含std命名空间: #include using namespace std;声明一个字符串变量为(本质上也可以理解为class string的一个对象,包含许多的成员函数): string str; //可以在声明时进行初始化 string str = "Hello";要输出str的单个字符,可以与传统C的字符串一样采用下标运算str[i]的形式,也可以采用成员函数(str.at(i))的形式,不同的是[]运算不会检查索引i是否越界,而at()函数会检查,使用无效时会抛出out_of_range异常。 同时,string类型的字符串是不以‘\0’结尾的,因此若str有三个字符,传统C语言的字符串的str[3]是字符‘\0’,但是string类型的只能到str[2],str[3]是没有定义的,而str. at(3)会提示越界奔溃。 C++ string类型字符串与C类型的字符串的简单对比如下: 功能 C++ string C字符数组 定义字符串 string str; char str[100]; 单个字符输出 str[i] / str.at(i) str[i] 字符串长度 str.length() / str.size() strlen(str) 读取一行 getline(cin,str) gets(str) 赋值 str = “Hello”; strcpy(str,“Hello”); 连接字符串 str = str + “Hello” strcat(str,“Hello”); 比较字符串 str == “Hello”; strcmp(str,“Hello”); 要使用strlen()、strcpy()函数需要包含C语言的字符串操作函数头文件: #include using namespace std; //上述两行代码等价于下面一行代码 #includeC++字符串与C字符串 C++ string类提供了c_str()、data()和copy()这三个成员函数用于将C++字符串string转换为C字符串C_string,其 函数 功能 c_str() 返回一个以‘/0’结尾的字符数组 data() 以字符数组的形式返回字符串内容,但并不添加’/0’ copy() 字符串的内容复制或写入既有的c_string或字符数组内 string str = "Hello World!"; const char* p1 = str.c_str(); const char* p2 = str.data(); const char* p3=new char[10]; str.copy(p3,5,0); //函数原型:copy(char *s, int n, int pos = 0) //把当前串中以pos开始的n个字符拷贝到以s为起始位置的字符数组中,返回实际拷贝的数目string还可以方便的改变字符串的容量大小,通过调用成员函数resize()可以重设string的容量。 string str="Hello"; str.resize(3);string可以很方便的查找字符串中的字符或者子串,其是通过成员函数find()和substr()实现的, find()函数是从str第3个位置查起,找到子串后,返回子串的位置;而substr函数从pos位置(子串开始的位置)开始,截取5个字符,赋值给str2,也就是说,str2的内容将是ssdfs。 string str = "aaaaddddssdfsasdf"; size_t pos = str.find("ssdf", 3);//注意pos的数据类型string::size_type //如果没找到,返回一个特殊的标志npos // 可以用if(pos != string::npos)则表示找到。 string str2 = str.substr(pos, 5);string还有很多的功能强大的函数,具体的用法可以参考以下的博文: https://www.cnblogs.com/zxouxuewei/p/5728720.html 二、stringstreamstringstream是 C++ 提供的一个字符串流(stream),和之前学过的iostream、fstream有类似的操作方式,要使用stringstream,必须包含其头文件: #include using namespace std; stringstream ss;< sstream > 库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。一般情况下使用stringstream就足够,因为字符串要频繁的涉及到输入输出。 < sstream > 使用string对象来代替字符数组,这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即便使用了不正确的格式化符也没有危险。 与文件流fstream类似,通过插入器()这两个运算符可以直接对stringstream上的数据输入输出,而将stringstream中的全部数据输出则是使用成员函数str(),其有两种形式: 1、void str() //无参形式,用于将stringstream流中的数据以string字符串的形式输出 2、void str (const string& s)//以字符串为参数,用以覆盖stringstream流中的数据 特别需要注意的是: // 字符串流清零,将流中的数据全部清除 ss.str("");示例代码: #include #include #include using namespace std; int main() { stringstream ss; ss |
CopyRight 2018-2019 实验室设备网 版权所有 |