OJ(while+cin.get()判断结束)

本文记录了一道C++在线判题(OJ)问题,涉及如何处理输入并输出。当遇到包含多个单词的输入行时,需要输出每一行,且逐行将第一个单词移到末尾。讲解了两种解决方案:一是结合`while`循环与`cin.get()`判断输入结束,二是使用`istringstream`处理输入。还讨论了C++中控制输入格式和未格式化的输入/输出操作。

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

今天要记录一道看起来十分简单的OJ题目,但开始对于cin的一些操作忘得差不多了,没做出来,故记下来给自己提个醒。

描述

给出包含N个单词的一行输入,输出N行。第一行和输入一样。每次输出过一行后,这一行的第一个单词在下一行被放到最后。

输入

包含N个单词的字符串,单词以一个空格分开。N不在输入中给出,你需要计算单词的数量来获得。字符串包含的字符数小于100。

输出

输出N行。 第一行和输入相同。 剩下的N-1行中,上一行的第一个单词被放到最后。每个单词之间有一个空格。

样例输入

Please think about it carefully

样例输出

Please think about it carefully
think about it carefully Please
about it carefully Please think
it carefully Please think about
carefully Please think about it

思路一

开始的时候,用while(cin>>str)来读每一个单词,但是cin不遇到EOF或者错误输入是不会停止的,所以光靠cin>>这种格式化的输入操作是不够的,考虑加上cin.get()这种非格式化的输入操作,在读取一个字符串后,用一次cin.get(),看是不是’\n’,如果是,就break。

代码一

#include "stdafx.h"
#include <iostream>
#include <queue>
#include <string>
using namespace std;

void display(const 
<think>好的,我需要回答用户关于C++中#include <bits/stdc++.h>的使用历史和流行程度的问题。首先,我需要回忆这个头文件的起源和发展。 记得<bits/stdc++.h>是GNU C++标准库的一部分,属于非标准头文件,它包含了所有的标准库头文件。用户可能想知道它何时被引入以及为什么流行起来。 根据参考资料,比如引用[3]提到std.h对应Linux头文件,编译bits/stdc++.h需要特定配置,这可能说明它在某些编译器如GCC中的支持情况。引用[4]和[5]提到在编程竞赛中使用,特别是在VSCode中配置,说明它的流行可能和竞赛编程相关。 接下来,我需要整理时间线。可能是在2010年左右随着GCC版本的更新而出现,并在竞赛编程社区中迅速流行,因为它简化了头文件的包含。但因为它不是标准的一部分,可能在正式项目中不推荐使用。 还需要注意不同编译器的支持情况,比如Clang可能不完全支持,而MSVC不支持。用户可能关心何时开始广泛使用,以及现在是否仍然常见。 需要确保回答结构清晰,分点说明起源、流行原因、现状,并引用相关资料。同时生成相关问题,比如优缺点、替代方案等。</think>### `#include <bits/stdc++.h>` 的历史与流行程度分析 #### 1. **起源与实现背景** `#include <bits/stdc++.h>` 是 **GNU C++ 标准库(libstdc++)** 的非标准特性,最早由 GCC(GNU Compiler Collection)实现。该头文件通过单行代码包含了所有 C++ 标准库头文件(如 `<iostream>`、`<vector>` 等),目的是简化竞赛编程中的代码编写。根据 GCC 的代码库记录,该特性可能于 **2010 年前后** 随 GCC 4.x 版本引入[^3][^4]。 #### 2. **流行时间段与场景** - **竞赛编程的兴起(2010–2018)** 在 ACM-ICPC、Codeforces、LeetCode 等编程竞赛中,选手需要快速编写代码。使用 `#include <bits/stdc++.h>` 避免了手动包含多个头文件的麻烦,因此迅速成为竞赛圈的“默认习惯”[^5]。 - **教育领域的渗透** 部分高校编程课程和在线教程(如中文社区的 OJ 平台)也推广了该用法,进一步扩大了其影响力。 - **局限性** 该头文件仅被 GCC 和部分兼容编译器(如 MinGW)支持,Clang 和 MSVC 等编译器不原生支持。此外,**C++ 标准委员会从未将其纳入 ISO 标准**,因此在生产环境中不被推荐。 #### 3. **现状与争议** - **2020 年后的争议** 随着 C++ 模块化(C++20 Modules)的推进和代码可移植性要求的提高,部分竞赛平台(如 Google Code Jam)开始明确建议避免使用该头文件。 - **替代方案** 开发者可通过预编译头(Precompiled Headers)或自定义头文件实现类似功能,但便捷性不及 `#include <bits/stdc++.h>`[^4]。 #### 4. **代码示例** ```cpp #include <bits/stdc++.h> // 包含所有标准库头文件 using namespace std; int main() { cout << "Hello World" << endl; return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值