C++ ACM模式输入输出

以下我们都以求和作为题目要求,来看一下各种输入输出应该怎么写。

1 只有一个或几个输入

输入样例:

3 5 7

输入输出模板:

int main() {int a, b, c;// 接收有限个输入cin >> a >> b >> c;// 输出结果cout << a+b+c << endl;
}

2 先给元素个数,再给元素

先给行数T,再给出T行

输入样例:

3
3 5 7
6 8 9
12 9 5

输入输出模板:

int main() {int T;vector<int> res;// 拿到输入行数Tcin >> T;// 接收T行输入while (T--) {int a, b, c;cin >> a >> b >> c;res.push_back(a+b+c);}// 输出结果for (int n : res) {cout << n << endl;}
}

先给数组元素个数,再给一行数组

n, m分别是接下来要给的两个数组元素的个数,输入样例:

5 2
1 4 2 6 5
2 3

接收输入代码:

int main() {int n, m;cin >> n >> m;vector<int> nums(n);for (int i=0; i<n; ++i) cin >> nums[i];vector<int> lens(m);for (int i=0; i<m; ++i) cin >> lens[i];
}

3 多组输入,读到文件结束符EOF为止

不直接告知有多少组输入,而是由EOF来判断。

方法一

cin 读到有数据输入时会返回非0,而读到文件结束符时会返回0,结束while循环。

int main() {int a, b;vector<int> res;while (cin >> a >> b) {res.push_back(a+b);}
}

方法二

scanf 读到文件结束符时会返回-1,而-1的补码表示恰好是全1,从而用按位取反得到0,此时结束 while 循环。

int main() {int a, b;vector<int> res;while (~scanf("%d%d", &a, &b)) {res.push_back(a+b);}
}

4 字符串的输入

同样有 cinscanf 两种方法

方法一

int main() {const int N = 100;char s[N];scanf("%s", s);
}

方法二:

int main() {string s;cin >> s;cout << s << endl;
}

字符串的输入有几点需要注意:

  • C/C++ 中读入的字符串时包含结束符 \0 的,我们需要的字符数组的长度要比真正的字符数加一;
  • cinscanf 两种读入方式都会忽略行首和行位的空格。

5 格式化输入scanf

情况一

当我们面对这样的字符串输入:214+1352,要来计算两数之和时,cin 就不好使了。需要我们的格式化输入 scanf

int main() {int a, b;scanf("%d+%d", &a, &b);cout << a+b << endl;
}

情况二

如果我们会接收到一排数字,而我们想要计算其中每单个数字的和,我们也可以借助格式化输入的 %1d 来实现,它能一位一位地读入标准输入:

int main() {int a;int sum = 0;while (~scanf("%1d", &a))sum += a;cout << sum << endl;
}

标准化输入函数 scanf 还有许多奇妙的用法,有兴趣可以自行查阅相关资料。

6 ASCII码

  1. 可以根据 ASCII 码的区间来判断某个字符是数字还是大小写字母等(比如通过与 'a''z'等 ASCII 码值的大小关系)。
  2. 根据数字字符的 ASCII 码得到数字本身的值:减去 0 的 ASCII 码 char c='3'; int a = c-'0',整型变量 a 的值为 3。

7 整行读取字符串

当我们不确定一行中是否有空格等特殊字符,我们可以使用 getline 进行整行读取:

int main() {string s;getline(cin, s);cout << s << endl;
}

默认以回车作为结束,如果需要自定义,可:

getline(cin, s, '?');

补充知识

string与char数组

  1. char[] 在C/C++中均可用,string仅在C++中可用,且需要 #include <string>,一般称 char[] 为 C 风格的字符串,称 string 为 C++ 风格的字符串
  2. string 通常用 cin 读入,char[] 通常用 scanf 读入。scanf 不可以用来读入 string
  3. char[] 构造 string:string str(s);
  4. string 转换为 char[]:s = str.c_str();
  5. 一般直接 cin 读取 string 会很慢,可以读到 char[] 中,再构造为 string

printf/scanf 与 cout/cin

在读取数据量巨大(经验值为大于1e5个正数以上)时,cin 会很慢,这是因为 cin/cout 需要与 scanf/printf 同步。

解决方法:

  1. 改用 scanf/printf

  2. 关闭同步,改善效率(有的编译器可行,有的无效)

    cin.tie(0); cout.tie(0); ios::sync_with_stdio(0);
    
  3. cout << endl; 除了换行之外,还会清空缓存区,而清空缓存区这件事情会耗时很久,因此为了提高速度,一般直接:cout << "\n";,会快很多

保留小数位数

  1. 如保留 3 位小数:printf("%.4f\n", a);, 此种方法会自动的四舍五入。
  2. 一位小数四舍五入成整数:float a = 2.7; printf("%d\n", int(a+0.5));

Ref:

https://www.bilibili.com/video/BV1ri4y1L7f7?from=search&seid=11052128712667700362&spm_id_from=333.337.0.0

C++ ACM模式输入输出相关推荐

  1. ACM模式输入输出攻略 | C++篇

    文章目录 ACM模式输入输出攻略 | C++篇 1.核心代码模式与ACM模式 2.C++常用的输入输出方法 2.1 输入 (1)cin (2)getline() (3)getchar() 2.2 输出 ...

  2. JS输入输出(ACM模式

    JS输入输出(ACM模式 1. 输入 1.1 一行输入一个int数字 1.2 一行为一个一维数组 ① 输入为`1 2 3`的形式 ② 输入为`123`的形式 2. 输出(数组输出为输入类似的形式) 2 ...

  3. python3 ACM模式的输入输出例子教学

    Python的输入是字符串,所以要自己转类型 strip去掉左右两端的空白符,返回str slipt把字符串按空白符拆开,返回[str] map把list里面的值映射到指定类型,返回[type] EO ...

  4. [JS]在ACM模式下获取输入

    输入输出处理 核心代码模式处理 不需要处理任何输入输出,直接返回值即可. ACM 模式 你的代码需要处理输入输出,请使用如下样例代码读取输入和打印输出: while (line = readline( ...

  5. 使用Javascript在Leetcode中的ACM模式下无法获取输入数据的问题

    今天做了一道字节的题目,是字节自己出的新题,没有任何题解,且只能使用 ACM 模式,代码编辑区一片空白.然而当我想获取自定义的输入数据时,却获取不到.本人前端一枚,平时做题都是使用 JS 写算法,所以 ...

  6. 面试 | Java 算法的 ACM 模式

    Java 算法的 ACM 模式 前言 1. 数字处理 1.1 多组空格分隔的两个正整数 1.2 第一行组数接空格分隔的两个正整数 1.3 空格分隔的两个正整数为0 0 结束 1.4 每行第一个为个数后 ...

  7. ACM模式各种输入整理(C++)

    1.前言 本文整理ACM模式的各种输入形式. 2. ACM模式的输入种类 2.1 整形数组输入 2.1.1 在终端的一行中输入固定数目的整型数字,并存到数组中,中间以空格分隔 示例: 3 1 2 3 ...

  8. Java ACM模式

    Java ACM模式 文章目录 Java ACM模式 1:java.util.* 2:其他 1:java.util.* Scanner reader = new Scanner(System.in); ...

  9. ACM的输入输出总结

    关于ACM的输入输出(一) 一般来说ACM的现场赛会规定输入输出 或者是文件输入标准输出 也可能是文件输入文件输出 如果没有规定的话那么一般就是标准的输入输出了 那说一下输入输出的重定向 一般用下面两 ...

最新文章

  1. AI可以在游戏里称霸,但是解决现实问题太难了
  2. apache禁止访问html,apache 限制目录访问
  3. 人脸识别有哪些利与弊
  4. [PAT乙级]1022 D进制的A+B
  5. IME输入法编程心得
  6. 从 HTML 提取文本的 7 个工具
  7. 飘云阁15周年逆向破解教程
  8. Android ndk开发入门集锦一
  9. pyinstaller 出现Cannot find existing PyQt5 plugin directories
  10. 看看别人家的神仙公司
  11. 抖音云控系统多少钱一套?
  12. 企业级网络性能优化 课内8 vlanif2in1
  13. 【Java】 实现一个简单文件浏览器(1)
  14. 【NDN IoT】Caching in Named Data Networking for the Wireless Internet of Things
  15. automotive 安卓开发_谷歌首次提及「Android Automotive」,是安卓车机系统亮相前奏?...
  16. java正则表达式 以开头结尾_正则匹配 符合以什么开头以什么结尾的
  17. 最新进展:钉钉被小学生逼疯,拍片在线求饶哈哈哈哈
  18. 刚子扯谈:广告向东 客户向西
  19. MIR4 预制凭证修改及过账,尾差调整
  20. 微信营销解密:移动互联网时代的营销革命

热门文章

  1. Springboot2.x +JPA 集成 Apache ShardingSphere 读写分离
  2. ftp 553 Could not create file
  3. Linux zookeeper下载、单点部署
  4. 在下拉菜单中,传递的value参数为 id时,如何拿到其 label值?
  5. JavaScript-jQuery选择器
  6. tcp分包传图片 如何还原_技术控丨超详细解析TCP重传机制
  7. jq之$(“ul li:first-child“)
  8. 软件数控编程_这么多CNC数控编程软件, 你觉得哪个好?
  9. linux如何运行verilog,linux系统下ncverilog的详细命令linux系统下ncverilog的详细命令.doc...
  10. php怎么把日期加时间,将小时分钟添加到日期时间 - php