字符流

一、stringstream

C++标准库中的<sstream>提供了比ANSI C的<stdio.h>更高级的一些功能,即单纯性、类型安全和可扩展性。

首先要加入头文件#include <sstream>

istringstream //用于执行c++风格的串流输入
ostringstream //用于执行c++风格的串流输出
stringstream  //同时执行c++风格的串流输入输出

一般来说他都是用来进行类型转换

首先来看看sscanf()

我们用下面这一段代码来实现将字符类型转换为整型
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    char s1[15]="123.456 789";
    int a,c;
    double b;
    sscanf(s1,"%lf %d%n",&b,&a,&c);//c代表有几位转化了,此处有11位
    cout << b << " " << a << " " << c << endl;
    return 0;
}

结果是

再来看看ssprintf()

我们用下面这一段代码来实现将整型转换为字符类型
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    char s1[15]={'0'};
    int a=100;
    sprintf(s1,"%d",a);//将a转换成字符类型
    cout << s1 << endl;
    sprintf(s1,"%x",a);//将a转化成小写16进制再转换成字符类型
    cout << s1 << endl;
    sprintf(s1,"%X",a);//将a转化成大写16进制再转换成字符类型
    cout << s1 << endl;
    sprintf(s1,"%o",a);//将a转化成8进制再转换成字符类型
    cout << s1 << endl;
    return 0;
}

结果为

除此之外ssprintf()还可以连接两个字符。
#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
    char s2[15]="I love";
    char s3[15]="you";
    char s1[30];
    sprintf(s1,"%s %s",s2,s3);
    cout << s1 << endl;
    return 0;
}

结果输出是 I love you

除了以上那些类型转换的方法外还可以用stringstream

将 整型转成字符类型
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    stringstream s1; //定义一流
    string s2;       //定义一字符串
    int a;           //定义一整书
    cin >> a;        
    s1<<a;           //将int型流入流内
    s1>>s2;          //转换类型
    cout << s2 << endl;
    return 0;
}

这里写图片描述

注意再进行多次转换的时候,必须清空stringstream一般用clear()
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    stringstream s1; //定义一流
    string s2;       //定义字符串string型
    int a;           //定义整型
    cin >> a;
    s1<<a;
    s1>>s2;         //int转string
    cout << s2 << endl;
    s1.clear();    //清除
    cin >> a;
    char s3[10];   //定义字符串char型
    s1<<a;
    s1>>s3;        //int转char
    cout << s3 << endl;
    s1.clear();    //清除
    s1<<true;      //bool类型流入流
    s1>>a;
    cout << a << endl;
    return 0;
}

这里写图片描述

1.将一个任意的类型转换到特定的目标类型

#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;
template<class T>

void zhuan(string & ss,const T & shu)
{
    ostringstream os; //创建一个流
    os<<shu;          //把值存入流中
    ss=os.str();      //将转换后的值给ss
}

int main()
{
    string s1,s2,s3;
    zhuan(s1,13.14); //double到string型转换
    cout << s1 << endl;
    zhuan(s2,520);  //int到string型转换
    cout << s2 << endl;
    zhuan(s3,true); //bool到string型转换
    cout << s3 << endl;
    return 0;
}

这里写图片描述
2.任意类型之间的转换

#include <sstream>
#include <iostream>
#include <cstdio>
using namespace std;
template<class otype,class ivalue>
otype convert(const ivalue & t)
{
    stringstream stream;//定义一流
    stream<<t;          //向流中传值
    otype result;       //存储转换结果
    stream>>result;     //向result中写入值
    return result;
}

int main()
{
    double d;
    string sa;
    string s="13.14";
    d=convert<double>(s);//d等于13.14
    cout << d << endl;
    sa=convert<string>(520.0);//sa等于”520”
    cout << sa << endl;
    return 0;
}

这里写图片描述

希望多各位有帮助(^ω^)/
有不懂得欢迎留言

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章