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
### 实现东华大学OJ C++ 统计单词功能 为了实现统计给定字符串中的单词数量的功能,可以基于提供的AC代码进行解释和优化。该程序通过读取多组测试数据并计算每组中由空格分隔的单词数目来工作。 #### 代码解析 ```cpp #include<iostream> #include<string.h> // 使用更具体的头文件而不是 bits/stdc++.h using namespace std; int main() { int n; cin >> n; // 输入测试用例的数量 getchar(); // 吸收多余的换行符 char sentence[60]; while (n--) { gets(sentence); // 获取一行字符 char prev = ' '; int wordCount = 0; for (size_t i = 0; sentence[i] != '\0'; ++i) { if (sentence[i] != ' ' && prev == ' ') { ++wordCount; // 当遇到非空白字符而前一个是空白时,则认为遇到了新单词 } prev = sentence[i]; // 更新当前处理过的最后一个字符状态 } cout << wordCount << endl; // 输出本行文字内的单词数 } return 0; } ``` 此段代码实现了基本的单词计数逻辑[^1]。对于每一行输入的数据,遍历整个字符串数组`sentence[]`,利用变量`prev`跟踪上一个访问的字符是否为空白字符(即' ')。每当发现一个新的非空白字符紧接在一个或多个连续的空白之后,就增加一次单词计数器`wordCount`。 需要注意的是,在实际编程竞赛环境中应当避免使用不安全函数如`gets()`,推荐改用更加安全的方式获取用户输入,比如`fgets()`或者标准库中的流操作方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值