搞懂C++字符流的使用,不同类型间的转换

重要基础
插入器(<<)

向流输出数据,比如说系统有一个默认的标准输出流(cout),cout<<“nihao JT”<<‘\n’; 由于箭头方向向左,就是把字符串"nihao JT"和换行字符(‘\n’)输出到标准输出流,而标准输出流一般情况下就是指显示器。

吸取器(>>)

从流中输入数据。比如说系统有一个默认的标准输入流(cin),对于cin>>n,由于>>箭头方向向右,所以意思就是将cin中的数据输入n变量,所以cin>>n就把屏幕上的数据写入了n变量。也就是说箭头的方向就相当于流的方向,也就是数据的流向,对于其他流对象也是一样的道理。
通过本篇文章你会学习到:
1:字符流种类及使用
2:文章末尾讲解了三种超好用不同类型间的转换方法

C++字符流 #include
字符流一般使用stringstream的对象
父类sstream包含了istringstream ostringstream stringstream
而stringstream又包含了istringstream,ostringstream
stringstream的成员函数
1:获取字符流对象中字符串:string str();
2:重置字符流对象中字符串:string str(const string&str):

#include <iostream>
#include <sstream>
using namespace std;
int main()
{
    //No1.str 函数
    stringstream sstream(string("nihao!"));
    cout << sstream.str() << endl;
    sstream.str(string("woaini"));
    cout << sstream.str() << endl;
    sstream.clear();//此处没得用的,
    //其实clear()真的用处不大,如果以后你自己写代码的时候碰到了流对象输出不了了情况,就用clear()清空一下,但有时候会不起作用,一般直接用它的内置成员函数str()就能解决问题。
    cout << sstream.str() << endl;
    sstream.str("");
    cout << sstream.str() << endl;
    /*No2.输入输出流的 :>>(读操作,把字符流对象中的东西拿出来
        <<(写操作,把内容写到字符流对象中去)
    */  
    //2.1字符流实现数据类型转换
    int num = 12345;
    char str[20] = "hhaha ";
    char buf[20] = "888";
    cout << to_string(num) << endl;
    stringstream stream(str);
    cout << stream.str() << endl;
    stream << num;
    stream >> str;
    stream.str("");
    stream << buf;
    stream >> num;
    cout << num << endl;
    cout << str << endl;
    cout << stream.str() << endl;
    //2.2字符串处理
    //这里需要明白一个知识点:
    //流出去的内容的多少取决于对象的类型是什么
    //比如这下边定义了一个char temp的对象
    //那么每次流到它身上的内容只有一个字节
    //再比如是int类型的对象,则每次流一个整数进去,
    //再比如是一个string,则流一个字符串进去,以空格为结束位置
    stringstream ipInfo("ip地址: 192.168.1.1");
    char info[20] = "";
    ipInfo >> info;
    cout << "info:" << info << endl;
    int infoNum[4];
    char temp;
    for (int i = 0; i < 4; i++) {
        
        ipInfo >> infoNum[i];
        if (i < 3) {
            ipInfo >> temp; //用char才能保证只流出一个. 不能用string
        }
    }
    for (int i = 0; i < 4; i++) {
        cout << infoNum[i] << '\t';
    }
    cout << temp; //最终只打印出了一个.  
}
} 

拓展:
1:char类型和string类型的转换

#include<iostream>
#include<string>
using namespace std;
int main(){
	char str[20]="hahahah!";
	string tmp=str;
	//可以直接用char* 对象来初始化string类型对象
	//那么char *类型如何转化为string 类型呢
	char test[20]="";
	strcpy(test,tmp);//这样是错误的。必须把tmp转化为char*类型
	strcpy(test,tmp.c_str());//这样才是正确的。
	return 0;
}

2.int类型和char类型和string类型的转化

#include <iostream>
#include<string >
using namespace std;
int main()
{
	char test[20] = "";
	char str[] = "nihahah !";
	string tmp = str;
	cout << tmp<<endl;
	strcpy(test, tmp.c_str());
	cout << test;
	char s[] = "66";
	cout << atoi(s)<<endl;
	//同时附上string到int类型的转换
	string ss = "100";
	cout << stoi(ss);
	return 0;
}
#include <iostream>
#include<string >
using namespace std;
int main()
{
	char test[20] = "";
	char str[] = "nihahah !";
	string tmp = str;
	cout << tmp<<endl;
	strcpy(test, tmp.c_str());
	cout << test;
	char s[] = "66";
	cout << atoi(s)<<endl;
	//同时附上string到int类型的转换
	string ss = "100";
	cout << stoi(ss);
	return 0;
}

3:使用sscanf和sprintf实现不同格式的转换



 char str[] = "15.455";
     int i;
     float fp;
     sscanf( str, "%d", &i ); // 将字符串转换成整数 i = 15
     sscanf( str, "%f", &fp ); // 将字符串转换成浮点数 fp = 15.455000
​
如果要写跨平台的程序,请用sprintf。是Windows平台下扩展的,标准库中有sprintf,功能比这个更强,用法跟printf类似:
char str[255];
sprintf(str,%x”, 100); //将100转为16进制表示的字符串。
​
​
//输出8进制 = 014
pringf("%o",number);
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值