ACM模式下输入转换

1、缓冲区
缓冲区是用来保存我们从键盘输入数据的地方,就是从键盘输入的数据并不是直接赋值,而是先进入缓冲区,然后被cin使用
基本方式: 键盘输入->按下enter按键——>进入缓冲区
enter按键:输入完成之后,需要按下enter按键将数据送入缓冲区,同时enter按键(\r)会自动编成换行(\n)进行保存,如输入123456一共六个字符,enter要计算,所以一共保存的是7个。
2、cin如何在缓冲区中读取数据
什么叫做分隔符
(1) tab空格、空格、换行
使用方式
(1)cin从缓冲区内读取内容
(2)如果没有,那么cin的成员函数(类似getline函数)会停止等待,直到有数据
(3)如果有数据,就触发cin>>读取,那么判断第一个字符,如果第一个字符是分隔符,cin>>会将其忽略并并清除,继续读取下一个。直到找到字符,读取字符之后后面如果还有数据,后面的分隔符就依然保存在缓冲区内,不读取(此处可以使用cin.getline()函数的特点了)
3、一些用法
(1)cin循环输入类型

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

int main()
{
    int num;
    cin>>num;// 读取了1,但是回车还留在数据流中

    // 如果没有下面这句话,str得不到准确的输入
    // str 输出为空
    cin.ignore();//把剩余的缓冲区内的数据清楚
    string str;
    getline(cin,str);//从缓冲区中读取一行以换行符为结尾的数据
    cout << str.size() << endl;
    return 0;
}

(2)缓冲区读取指定长度

// 读取以空格为分割的一行数据
/* 输入 : 
1 2 3 4

输出 : 
1 2 3 4
 */
#include <iostream>
#include <sstream>
#include <vector>


using namespace std;
int main()
{
    int num;
    vector<int> nums;
    int i = 3;//如果输入时,以空格间隔输入5个数,到最后nums中只会存储两个数,剩下的保存在缓冲区中
    while(i--){// 遇到回车就停止输入
   		cin >> num
        nums.push_back(num);
    }
    for(auto v : nums){
        cout<<v<<" ";
    }
    cout<<endl;
    
    return 0;
}

3、读取以逗号分割的数据
getline只能一行以string类型的数据

// 读取以,分割的一行数据
// 输入: 1,2,3,4,5
// 输出 1 2 3 4 5 
#include <iostream>
#include <sstream>
#include <vector>

using namespace std;
int main(){
    string str;
    getline(cin,str);
    stringstream ss(str);

    vector<int> nums;
    string tmp;
    while (getline(ss, tmp, ',')) {
        nums.push_back(stoi(tmp));
    }
	//转换成long long类型
	/*stringstream ss(s);
    vector<long long>num;
    string temp;
	while (getline(ss, temp, ',')) {
        num.push_back(strtoll(temp.c_str(), NULL, 10));
    }*/
    // 输出 1 2 3 4 5 
    for(auto v : nums){
        cout<<v<<" ";
    }
}

(4)封装一个以任意分割符分割字符串的函数

// str 为输入字符串,del为分隔符,返回分割之后的字符串数组
vector<string> split(string str, char del) {
    stringstream ss(str);
    string tmp;
    vector<string> res;
    while (getline(ss, tmp, del)) {
        res.push_back(tmp);
    }
    return res;
}

文章转载自:https://blog.csdn.net/QT_continue/article/details/105715023
https://blog.csdn.net/qq_34525916/article/details/121379665

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值