【C++】输入输出及格式控制

本文介绍了在编程竞赛中C++中cin、getline和stringstream的使用技巧,包括处理分隔符、读取整数到vector、以及不同情况下的输入控制方法。

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

在各类算法竞赛和机试中,对测试数据和输出格式往往会有明确的规定,笔者结合个人刷题经历,得到了以下C++语言输入输出控制的方法。

cin:从缓冲区中读取数据

cin>>从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理

cin.get():读一个字符

cin.get()

cin.get()从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取

即 cin.get()不舍弃行尾换行符 ==> 消除行尾换行符

getline():读整行数据

读取一行数据,并将分隔符之外的元素存储到指定数据结构中。

getline(cin,s)可以一次性读取自带空格的一行数据,弃行尾的换行符

getline (istream&  is, string& str, char delim);

将is中的数据读入str中,delim中的符号不存储(delim截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入,并且将’\n’直接从输入缓冲区中删除掉,不会影响下面的输入处理)

img

<< 表示数据流向

字符串流(stringstream):字符串I/O、数据类型转换

字符串流(stringstream)是一种特殊的流类,它允许将字符串作为输入和输出流进行处理。

头文件

其他类型转string:

std::stringstream ss;
ss << num;

string转其他类型:

使用类似cin的形式

 std::string str = "12345";
    std::stringstream ss(str);
    int num;
    ss >> num;

使用getline处理:

getline(str,s,',')//将str流中“,”分割的元素存入s中

读取一行整数放入vector中

(1)使用cin.get()

    vector<int> a;
    vector<int> b;
    string line, word;
    int temp;
    //放入第一个字符,注意cin是会对第一个换行符视而不见的
    cin >> temp;
    a.push_back(temp);
    //直到读取到换行符结束
    while (cin.get() != '\n') 
    {
        cin >> temp;
        a.push_back(temp);
    }

(2)使用cin.getline()

    getline(cin, line);
    //将记录绑定到刚刚读取的行,用到了sstream里面的对象
    istringstream record(line);
    while (record >> word)
    {
        b.push_back(atoi(word.c_str()));
    }

while(t–):行数固定

总行数已知

int t;
    cin>>t;
    while(t--){
    //处理每行数据
    }

while(cin &&):输入0结束循环

while(cin>>t&&t)//判断当前读取数据是否为0

while(cin):输入多组数据(任意组)

不指定数据组数量,例如EOF

while(cin>>a>>b)//可反复输入,直到没有读取到输入结束
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值