• C++ sstream 中处理字符串


    C++引入ostringstream、istringstream、stringstream这三个类,要使用他们创建对象就必须包含<sstream>这个头文件。

    istringstream的构造函数原形如下:
    istringstream::istringstream(string str);
    它的作用是从string对象str中读取字符,stringstream对象可以绑定一行字符串,然后以空格为分隔符把该行分隔开来。

    下面我们分离以空格为界限,分割一个字符串。

    #include<iostream>
    #include<sstream>
    #include<string>
    int main()
    {
        std::string str = "I am coding ...";
        std::istringstream is(str);
        do
        {
            std::string substr;
            is>>substr;
            std::cout << substr << std::endl;
        } while (is);
        return 0;
    }

    程序输出

    I

    am 

    coding

    ...

    另外用vector也可以实现

    #include <vector>
    #include<iostream>
    #include <string>
    #include <sstream>
    using namespace std;
    int main()
    {
        string str("I am coding ...");
        string buf;
        stringstream ss(str); 
        vector<string> vec; 
        while (ss >> buf)
            vec.push_back(buf);
        for (vector<string>::iterator iter = vec.begin(); iter != vec.end(); ++iter)
        {
            cout << *iter << endl;
        }
        return 0;
    }

    补充知识点,自己积累学习

    在类型转换中使用模板

    你可以轻松地定义函数模板来将一个任意的类型转换到特定的目标类型。例如,需要将各种数字值,如int、long、double等等转换成字符串,要使用以一个string类型和一个任意值t为参数的to_string()函数。to_string()函数将t转换为字符串并写入result中。使用str()成员函数来获取流内部缓冲的一份拷贝:

    template<class T>
    
    void to_string(string & result,const T& t)
    
    {
    
       ostringstream oss;//创建一个流
    
       oss<<t;//把值传递如流中
    
       result=oss.str();//获取转换后的字符转并将其写入result
    }


    这样,你就可以轻松地将多种数值转换成字符串了:

    to_string(s1,10.5);//double到string

    to_string(s2,123);//int到string

    to_string(s3,true);//bool到string

    可以更进一步定义一个通用的转换模板,用于任意类型之间的转换。函数模板convert()含有两个模板参数out_type和in_value,功能是将in_value值转换成out_type类型:

    template<class out_type,class in_value>
    
    out_type convert(const in_value & t)
    
    {
    
       stringstream stream;
    
       stream<<t;//向流中传值
    
       out_type result;//这里存储转换结果
    
       stream>>result;//向result中写入值
    
        return result;
    
    }

    这样使用convert():

    double d;

    string salary;

    string s=”12.56”;

    d=convert<double>(s);//d等于12.56

    salary=convert<string>(9000.0);//salary等于”9000”

  • 相关阅读:
    CoreSeek Sphinx 安装
    【Asp.net入门2-01】C#基本功能
    【Asp.net入门16】第一个ASP.NET 应用程序-总结
    【Asp.net入门15】第一个Asp.net应用程序-输入验证
    【Asp.net入门11】第一个ASP.NET 应用程序-创建摘要视图
    【Asp.net入门09】第一个ASP.NET 应用程序-处理窗体(1)
    【Asp.net入门08】第一个Asp.net应用程序-创建窗体并设置其样式
    【Asp.net入门07】第一个ASP.NET 应用程序-创建数据模型和存储库
    【Asp.net入门06】第一个ASP.NET 应用程序-案例说明
    【Asp.net入门05】第一个ASP.NET 应用程序-测试Asp.net程序
  • 原文地址:https://www.cnblogs.com/Forever-Kenlen-Ja/p/4946329.html
Copyright © 2020-2023  润新知