每日一题2023.7.19|ACM模式

文章目录

C++的输入方式介绍

参考博客

cin>>

最基本,最常用的字符或者数字的输入方式。在输入过程中会过滤掉不可见字符、如空格、回车、tab。若不想过滤掉空白字符,可以使用noskipws流进行控制。

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int input[5];
    for(int i=0;i<5;++i) cin>>input[i];
    for(int i=0;i<5;++i) cout<<input[i]<<" ";
    cout<<endl;
    return 0;
}

运行结果

遇到空格回车等会结束获取输入的字符串,后面的字符串会被过滤掉(存放在输入流中),如果后面还需要输入字符串,则会从前面存放的字符串开始获取。

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    char c[20];
    cin>>c;
    cout<<c<<endl;
    char d[20];
    cin>>d;
    cout<<d<<endl;
    cout<<endl;
    return 0;
}

运行结果

cin.get(字符变量名)

此函数从输入流中读入一个字符(char,非int,如果定义为数组或者int就会出错)返回值是该字符的ascii值,碰到输入的末尾返回EOF(值为-1)

cin.get(字符变量名),用来接收字符,只获取一个字符,可以接收空格遇回车结束。

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    char c[6];
    for(int i=0;i<5;++i) cin.get(c[i]);
    for(int i=0;i<5;++i) cout<<c[i];
    c[5]='\0';
    cout<<endl<<c<<endl;
    return 0;
}

cin.get(数组名,接收字符数目)

用来接受字符串,可以接收空格遇回车结束。(数组的最后一位是'\0',所以预设数组大小要比接收字符大小大1)

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    char c[6];
    cin.get(c,6);
    cout<<c<<endl;
    return 0;
}

cin.get()

没有参数,主要用于舍弃输入流中不需要的字符或者舍弃回车(舍弃紧挨着的一个字符)。

cin.getline()

读取字符。getline()是istream类的成员函数,有如下两个重载版本

cpp 复制代码
istream &getline(char*buf,int bufsize);
istream &getline(char*buf,int bufsize,char delim);//自定义结束字符

第一个版本从输入流中读取bufsize-1个字符到缓冲区buf,或遇到\n为止(哪个条件先满足就按照哪个条件执行)函数会自动在数据的末尾添加'\n';

第二个版本与第一个版本的区别在于,第一个版本是读到\n为止,第二个版本是读到delim字符为止,\n或者delim都不会被读入buf,但会被从输入流取走。

这两个函数的返回值就是函数所作用的对象的引用。如果输入流中\n或者delim之前的字符个数达到或者超过bufsize,就会导致读入出错,其结果是:虽然本次读入已经完成,但是之后的读入都会失败。

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    char c[6];
    cin.getline(c,6);
    cout<<c<<endl;
    cin.getline(c,6,'e');
    cout<<c<<endl;
    return 0;
}

getline()

用于string类的。使用需要包含头文件#include。getline(cin,string,s);接收一个字符串,可以接收空格、回车等。

与cin.getline()的区别:

cin.getline()接收输入字符串的是数组,getline()是string类型

cin.getline()会在数组结尾添加'\0',getline()不会

cpp 复制代码
#include<iostream>
#include<string>
using namespace std;
int main(){
    string str;
    getline(cin,str);
    cout<<str<<endl;
    return 0;
}

虽然getline()也使用了cin,他们之间的区别在于:

getline()中的结束符,结束之后不存放入缓冲区

cin的结束符结束之后存放在缓冲区。使用cin之后还要继续输入字符,可以使用getline()将多余的字符吃掉

cpp 复制代码
#include<iostream>
#include<string>
using namespace std;
int main(){
    string str;
    cin>>str;
    getline(cin,str);
    cin>>str;
    //getline(cin,str);
    cout<<str<<endl;
    return 0;
}

gets()

char *gets(char *str);

gets()函数存在一些安全问题,容易导致缓冲区溢出。由于无法限制读取的字符数量,只会根据输入行的长度决定读取的字符数量,因此可能会导致输入数据超出目标缓冲区的长度,进而造成缓冲区溢出漏洞。

更安全的替代函数fgets();

cpp 复制代码
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int main(){
    char str[5];
    fgets(str,sizeof(str),stdin);
    printf("%s\n",str);
    return 0;
}

getchar()

需要包含#include。

从标准的输入stdin中读取字符。可以从流中取出回车符

cpp 复制代码
#include<iostream>
#include<string>
using namespace std;
int main(){
    string str;
    cin>>str;
    getchar();
    getline(cin,str);
    cout<<str<<endl;
    return 0;
}

A+B问题|

题目描述

你的任务是计算a+b

输入

输入包含一系列的a和b对,通过空格隔开。一对a和b占一行

输出

对于输入的每对a和b,依次输出a、b的和。对于输入中的第二对a和b,在输出中它们的和应该在第二行

样例输入

3 4

11 40

样例输出

7

51

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int a,b;
    while(cin>>a>>b){
        cout<<a+b<<endl;
    }
    return 0;
}

A+B问题||

题目描述

你的任务是计算a+b,但输入方式有变

输入

第一行是一个整数N,表示后面会有N行a和b,通过空格隔开

输出

对于输入的每对a和b,依次输出a、b的和。对于输入中的第二对a和b,在输出中它们的和应该在第二行

样例输入

2

3 4

11 40

样例输出

7

51

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int N;
    cin>>N;
    int a,b;
    while(N--){
        cin>>a>>b;
        cout<<a+b<<endl;
    }
    return 0;
}

A+B问题|||

题目描述

你的任务是计算a+b

输入

输入中每行是一对a和b。其中会有一对是结束标志0和0,且该标志不参与计算

输出

对于输入的每对a和b,依次输出a、b的和。对于输入中的第二对a和b,在输出中它们的和应该在第二行

样例输入

3 4

11 40

0 0

样例输出

7

51

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int a,b;
    while(1){
        cin>>a>>b;
        if(!a&& !b) break;
        cout<<a+b<<endl;
    }
    return 0;
}

A+BⅣ

题目描述

你的任务是计算若干整数的和

输入

每行的第一个数N,表示后面有N个数。如果N=0时表示输入结束,且这一行不要计算。

输出

每一行数据输出相应的和

样例输入

4 1 2 3 4

5 1 2 3 4 5

0

样例输出

10

15

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int N;int a,sum;
    while(true){
        cin>>N;
        if(!N) break;
        sum = 0;
        while(N--){
            cin>>a;
            sum+=a;
        }
        cout<<sum<<endl;
    }
    return 0;
}

A+B问题Ⅴ

题目描述

你的任务是计算两个整数的和

输入

输入包括若干行,每行输入两个整数a和b,由空格分隔。

输出

对于每组输入,输出a和b的和,每行输出后接一个空行

样例输入

2 4

11 19

样例输出

6

空行

30

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int a,b;
    while(cin>>a>>b){
        cout<<a+b<<endl<<endl;
    }
    return 0;
}

A+B问题Ⅵ

题目描述

你的任务是计算若干整数的和

输入

输入的第一行为一个整数N,接下来N行每行先输入一个整数M,然后在同一行内输入M个整数。

输出

对于每组输入,输出M个整数的和,每组输出之间输出一个空行。

样例输入

3

4 1 2 3 4

5 1 2 3 4 5

3 1 2 3

样例输出

10

空行

15

空行

6

cpp 复制代码
#include<iostream>
using namespace std;
int main(){
    int N;cin>>N;
    int M,a,sum;
    while(N--){
        cin>>M;sum=0;
        while(M--) {cin>>a;sum+=a;}
        cout<<sum<<endl<<endl;
    }
    return 0;
}
相关推荐
炘爚1 分钟前
phase1:基础框架——编译 + MySQL + 登录/注册
linux·c++
水木流年追梦15 分钟前
大模型入门-大模型优化方法13- MTP 多 token 输出、DCA 双块注意力
人工智能·分布式·算法·正则表达式·prompt
特种加菲猫18 分钟前
C++11核心特性深度解析:从列表初始化到lambda与包装器
开发语言·c++
数据皮皮侠21 分钟前
全国消协智慧 315 平台投诉信息数据库
大数据·人工智能·算法·百度·制造
8Qi829 分钟前
LeetCode 115 & 392:不同子序列 / 判断子序列
算法·leetcode·职场和发展·动态规划
枕星而眠32 分钟前
C++ 面向对象核心机制深度解析:多态性、虚函数、虚继承与 final 类
运维·开发语言·c++·后端
小蒋学算法1 小时前
算法-乘法表中第K小的数-二分
数据结构·算法
智者知已应修善业1 小时前
【51单片机8个LED,已经使用了D1D2,怎么样在不动D1D2的前提下实现D6~D8的流水灯】2024-1-19
c++·经验分享·笔记·算法·51单片机
Evand J1 小时前
【MATLAB例程】自适应渐消扩展卡尔曼滤波(AFEKF)三维雷达目标跟踪|效果已调优,附下载链接和运行结果,代码直接运行即可
开发语言·算法·matlab·目标跟踪·卡尔曼滤波·自适应滤波·代码定制
坚果派·白晓明1 小时前
鸿蒙PC适配实战:simdjson 三方库移植攻略与 AtomCode Skills 提效之道
c++·harmonyos·三方库·skills·atomcode·c/c++三方库·c/c++三方库适配