有关输入的总结

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


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.csdn.net/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、付费专栏及课程。

余额充值