C++ stringstream 简单使用

C++ stringstream 简单使用

简介

stringstream 定义于头文件 <sstream>,它其实是个别名,具体定义如下:

typedef basic_stringstream<char> stringstream;

类模板 std::basic_stringstream 实现基于字符串的流上的输入与输出操作。它等效地存储一个 std::basic_string 的实例,并在其上进行输入与输出操作。继承图如下:

在这里插入图片描述

简单使用

构造函数

stringstream 的构造函数有很多,这里列举最为常用的两个构造函数:

  1. 创建一个对象,向对象输入字符串:
stringstream ss;
ss << str;
  1. 在创建对象的时候使用字符串初始化:
streamstring ss(str);

两种方式都可以创建对象,但创建后的对象用法不一样,详见后面的示例。

输出字符串

stringstream 可以将存储于内部的字符串输出,需要调用 str() 函数,不可直接输出:

std::cout << ss.str() << std::endl;

// std::cout << ss << std::endl; 		// 错误不可直接输出

示例

两种构造函数带来的不同

上面阐述了两种构造函数,利用不同的构造函数创建对象,对象具体的操作也不同:

  1. 第一种构造方式
#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    stringstream ss1;
    ss1 << "fre";
    ss1 << "gre";
    cout << ss1.str() << endl;
    
    return 0;
}

/*
输出:
fregre
*/
  1. 第二种构造方式
#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    string str("asd");
    stringstream ss2(str);
    cout << ss2.str() << endl;

    ss2 << "r";
    cout << ss2.str() << endl;

    ss2 << "13";
    cout << ss2.str() << endl;

    ss2 << "hy";
    cout << ss2.str() << endl;
    
    return 0;
}

/*
输出:
asd
rsd
r13
r13hy
*/

可以发现,利用第一种构造函数创建对象时,输入字符串后直接进行字符串拼接,而第二种构造方式,在进行字符串拼接时,首先把原本的字符串覆盖掉,之后再进行拼接。

如果不想原来的字符串被覆盖,则需要换一种构造方式,如下:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    ostringstream ss("1 2 3 4 ", std::ios_base::ate);	// append 方式追加
    cout << ss.str() << endl;

    ss << "5 3 4";
    cout << ss.str() << endl;
    
    return 0;
}
/*
输出:
1 2 3 4 
1 2 3 4 5 3 4
*/

修改、清空 stringstream 内容

stringstream 的内容可以通过 str() 函数进行修改、清空:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    stringstream ss("fghewoo");
    cout << ss.str() << endl;

    // 修改内容
    ss.str("123456");
    cout << ss.str() << endl;

    // 清空内容
    ss.str("");
    cout << ss.str() << endl;

    return 0;
}

/*
输出:
fghewoo
123456

*/

利用 stringstream 去除字符串空格

stringstream 默认是以空格来分割字符串的,利用 stringstream 去除字符串空格非常方便:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    stringstream ss("2 dfjho 43");
    cout << ss.str() << endl;
    
	cout<< endl;
    
    string str;
    while (ss >> str)
    {
        cout << str << endl;
    }
    
    return 0;
}

/*
输出:
2 dfjho 43

2 
dfjho 
43
*/

利用 stringstream 指定字符分割字符串

上面描述了利用 stringstream 去除字符串空格,其实就是利用空格来分割字符串,同样,也可以指定其他字符对字符串进行分割,这需要与 getline() 函数搭配使用,下面以逗号分割字符串为例:

#include <iostream>
#include <sstream>
using namespace std;

int main()
{
    string source = "abc,123,<!>";
    stringstream ss(source);
    cout << ss.str() << endl;
    
	cout<< endl;

    string str;
    while (getline(ss, str, ','))
    {
        cout << str << endl;
    }

    return 0;
}

/*
输出:
abc,123,<!>

abc
123
<!>
*/

上述代码以逗号作为分割依据来分割字符串,同样的还可以扩展到其他字符。

以上几个示例非常实用,如果能够熟练使用将会大大提高编码效率,后续再遇到什么实用的例子继续更新~~

  • 113
    点赞
  • 576
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
C++中的stringstream是一个类,它可以用于在内存中存放和处理字符串。引用提供了一个简单的示例,展示了如何使用stringstream将多个字符串拼接在一起。首先,你需要包含头文件<sstream>和<iostream>。然后,在main函数中创建一个stringstream对象,使用"<<"符号将多个字符串逐个插入到stringstream中。最后,使用stringstream的str()方法将其转换为string类型并输出。 清空stringstream有两种方法,引用提供了示例代码。第一种方法是使用clear()方法,适用于需要进行多次数据类型转换的情况。第二种方法是使用str(""),即将一个空字符串传递给str()方法,适用于只需清空stringstream而不进行其他操作的情况。 另外,引用还提供了使用stringstream将int类型转换为string类型的示例代码。首先,将int类型的值插入到输入流中,然后使用"<<"符号将其抽取出来并赋给一个string类型的变量。 综上所述,C++中的stringstream类提供了一种方便的方式来处理和操作字符串。它可以用于拼接字符串、清空stringstream以及将不同的数据类型转换为字符串类型。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C++ stringstream](https://blog.csdn.net/Sakuya__/article/details/122751238)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值