C++字符串流stringstream与string知识介绍与用法小结 您所在的位置:网站首页 输出stringstream C++字符串流stringstream与string知识介绍与用法小结

C++字符串流stringstream与string知识介绍与用法小结

2024-02-04 09:09| 来源: 网络整理| 查看: 265

大家好,又见面了,我是你们的朋友全栈君。

之前总结了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; //上述两行代码等价于下面一行代码 #include

C++字符串与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

二、stringstream

stringstream是 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 实验室设备网 版权所有