stringstream使用案例

本文介绍了一种利用C++中的stringstream结合map数据结构来统计一行文本中不同单词数量的方法。通过对输入字符串进行处理,该程序能够有效地区分并计数各个独立单词。

在这里插入图片描述
http://acm.hdu.edu.cn/showproblem.php?pid=2072

#include<cstdio>
#include<iostream>
#include<string>
#include<map>
#include<sstream>
using namespace std;
int main(void)
{
    string s;
    while(getline(cin,s),s!="#")
    {
        map<string,bool>mp;
        stringstream ll(s);
        string ss;
        while(ll>>ss) mp[ss]=true;
        cout<<mp.size()<<endl;
    }
    return 0;
}

stringstream的用法

### C++ 中 `std::stringstream` 的基本用法 `std::stringstream` 是 C++ 标准库中的一个类,用于在字符串和数值之间进行转换以及格式化输入/输出操作。它是基于流的操作方式设计的,因此可以像处理标准输入输出一样来处理字符串。 #### 基本功能 1. **字符串到数值的转换** 使用 `std::stringstream` 可以轻松地将字符串解析为整数、浮点数或其他类型的变量。 2. **数值到字符串的转换** 同样可以通过 `std::stringstream` 将各种数据类型转化为字符串形式。 3. **格式化的输入输出** 支持类似于 `cin` 和 `cout` 的格式控制符(如宽度设置、精度调整等),从而实现复杂的字符串操作。 --- #### 示例代码展示 以下是几个常见的使用场景: ##### 场景一:字符串转数值 ```cpp #include <iostream> #include <sstream> int main() { std::string str = "123"; int num; std::stringstream ss(str); ss >> num; // 从 stringstream 提取整数 std::cout << "Converted number: " << num << "\n"; // 输出结果为 123 } ``` ##### 场景二:数值转字符串 ```cpp #include <iostream> #include <sstream> int main() { double value = 3.14159; std::ostringstream oss; // ostringstream 专门用于写入操作 oss << value; // 将双精度浮点数写入流中 std::string result = oss.str(); // 转换为字符串 std::cout << "String representation of the number: " << result << "\n"; // 输出 "3.14159" } ``` ##### 场景三:复杂字符串拆分 假设有一个逗号分隔的字符串,希望将其分解成多个部分: ```cpp #include <iostream> #include <sstream> int main() { std::string input = "apple,banana,cherry"; std::istringstream iss(input); // 创建 istringstream 对象 std::string item; while (getline(iss, item, ',')) { // 按照逗号分割字符串 std::cout << "Item: " << item << "\n"; // 分别输出 apple banana cherry } } ``` --- #### 解决常见问题 1. **如何判断 `std::stringstream` 是否成功提取了值?** 如果尝试从 `std::stringstream` 中读取失败,则可以通过检查流的状态标志位来确认错误情况。例如: ```cpp std::string invalidStr = "abc"; int val; std::stringstream ss(invalidStr); if (!(ss >> val)) { std::cerr << "Conversion failed!\n"; // 当无法将 "abc" 转换为整数时触发此消息 } ``` 2. **为什么我的程序会因为 `std::stringstream` 导致性能下降?** 这可能是因为频繁创建销毁 `std::stringstream` 对象引起的开销较大。如果需要多次重复利用同一个对象,建议重置其状态而不是每次都重新实例化它。例如: ```cpp std::stringstream ss; ss.clear(); // 清除之前的错误标志 ss.str(""); // 设置为空字符串以便再次使用 ss << newContent; // 继续向其中写入新内容 ``` 3. **能否自定义分隔符进行字符串切割?** 上述例子展示了按逗号分离的方法,实际上也可以替换其他字符作为分隔依据。只需修改 `getline()` 函数第三个参数即可[^4]。 --- ### 总结 通过以上介绍可以看出,`std::stringstream` 不仅提供了便捷的方式来完成不同类型之间的相互转化,还支持灵活高效的字符串分析任务,在实际开发过程中非常实用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值