有关输入的总结

本文介绍了C++中istringstream、ostringstream及stringstream的使用方法,并通过示例展示了这些流类如何实现不同数据类型之间的转换,以及如何处理多字符串输入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还是总结下,不然又忘了,尤其是编程方面的东西,三日不接触就忘了金光。


1.以前一直处理不好输入,只会最简单的cin,但是的确cin解决了很多问题,但是当遇到空格是,就没法处理了。详细的参考这个博客http://www.cnblogs.com/A-Song/archive/2012/01/29/2331204.html

如果要处理一个字符串,而且是每一行中有好几个字符串的问题,常常应付不过。所以现在介绍一个厉害的东西


istringstream, ostringstream, stringstream.分别对应输入,输出,输入输出。都在sstream库中。

具体如何使用,请看这里。

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

int main()
{	
	string str, line;//初始化string,充分利用c++处理string字符的优势
	while(getline(cin, line)) //getline函数待会介绍
	{
		istringstream stream(line);//stream这个相当于声明了一个isstringstream对象
		while(stream >> str)//isstringstream 对象可以自如的转换各种数据类型,而且以空格为分隔符将字符串分解出来。
			cout << str << endl;
	}
	return 0;
	
}
stringstream转换对象的用例(转自http://blog.163.com/zhuandi_h/blog/static/180270288201291710222975/)

例子一:基本数据类型转换例子 int转string

 

#include <string>
#
include <sstream>
#
include <iostream> 

int main()
{
    std::stringstream stream;
    std::string result;
    int i = 1000;
    stream << i; //将int输入流
    stream >> result; //从stream中抽取前面插入的int值
    std::cout << result << std::endl; // print the string "1000"

例子二

例子二:除了基本类型的转换,也支持char *的转换。

 

#include <sstream>
#
include <iostream> 

int main()
{
    std::stringstream stream;
    char result[8] ;
    stream << 8888; //向stream中插入8888
    stream >> result; //抽取stream中的值到result
    std::cout << result << std::endl; // 屏幕显示 "8888"

例子三:再进行多次转换的时候,必须调用stringstream的成员函数clear().

 

#include <sstream>
#
include <iostream>
int main()
{
    std::stringstream stream;
    int first, second;
    stream<< "456"; //插入字符串
    stream >> first; //转换成int
    std::cout << first << std::endl;
    stream.clear(); //在进行多次转换前,必须清除stream
    stream << true//插入bool值
    stream >> second; //提取出int
    std::cout << second << std::endl;

这里还涉及到另一个函数getline()

getline函数。转自http://blog.youkuaiyun.com/yelbosh//article/details/7483521

C++中有两个getline函数,一个是在string头文件中,定义的是一个全局的函数,函数声明是istream& getline ( istream& is, string& str, char delim )与istream& getline ( istream& is, string& str );另一个则是istream的成员函数,函数声明是istream& getline (char* s, streamsize n )与istream& getline (char* s, streamsize n, char delim );注意第二个getline是将读取的字符串存储在char数组中而不可以将该参数声明为string类型。
而百度百科上面只有第二种情况,没有第一种。很蛋疼。
在这里,注意下,getline的参数是istream,但是在上面istringstream中,getline(cin),cin是iostream中的,但是也是继承与istream,所以这里也有派生类的应用哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值