C++输入字符串跳过空格 只当回车的时候才视为字符串完结

在解决OJ题时遇到字符串输入含空格的问题,通常cin会将空格视为结束标志。文章介绍了使用getline函数从标准输入读取整行字符串,包括空格,其包含于<string>头文件中。并给出了一个简单的模拟getline功能的C++代码示例,通过getchar逐字符读取直到遇到换行符。

        在最近做OJ题的时候,经常会有一些题目输入的字符串是有空格的,如果直接调用cin去输入的话,我们会发现到空格的时候字符串已经标识为停止了,为了防止这种情况,我们可以调用geline函数

      getline函数的头文件是<string>

         首先我们直接上一个例子>

         这个时候我们就会发现跳过空格了。

string s;
getline(cin, s);

        好了如果着急的同学可以直接划出去了!那么底层是怎么实现这个getline函数的呢,我们来看一下模拟实现。 

#define _CRT_SECURE_NO_WARNINGS 1
#include<string>
#include<iostream>
using namespace std;
int main()
{
	string s;
	char temp=getchar();
	while (temp != '\n')
	{
		s.push_back(temp);
		temp = getchar();
	}
	cout << s;
	return 0;
}

 

### 如何在C++中正确输入包含空格字符串C++中,`cin` 默认会在遇到第一个空白字符(如空格或制表符)时停止读取输入。因此,当需要处理包含空格字符串时,通常会使用 `std::getline()` 函数[^1]。 #### 使用 `std::getline()` 输入空格字符串 `std::getline()` 是一种更灵活的方式用于从标准输入流 (`std::cin`) 中获取一整行数据,包括其中可能存在的空格。其基本语法如下: ```cpp std::getline(std::istream& is, std::string& str, char delim); ``` - 参数说明: - `is`: 输入流对象,通常是 `std::cin`。 - `str`: 存储输入结果的目标字符串变量。 - `delim`: 可选参数,默认为换行符 `\n`,表示终止读取操作的分隔符。 下面通过一个例子展示如何利用 `std::getline()` 来捕获带有空格字符串: ```cpp #include <iostream> #include <string> int main() { std::string s; std::cout << "请输入一段文字(可以含空格): "; std::getline(std::cin, s); // 获取整个输入行,直到遇到 '\n' std::cout << "您输入的内容是: " << s << std::endl; return 0; } ``` 在这个示例中,无论用户输入多少个单词以及中间有多少个空格,都会被完整保存到字符串 `s` 中。 #### 自定义分隔符的情况 除了默认以换行符作为结束标志外,还可以指定其他字符充当分隔符。例如,在给定代码片段里设置了 `'D'` 作为自定义分界线: ```cpp std::string s; std::getline(std::cin, s, 'D'); // 假设输入为 "hello 优快云" // 输出将是 "hello CS" ``` 这里一旦检测到字符'D', 就立即停止进一步读入并返回当前累积的结果. #### 循环条件下的退出机制讨论 对于某些场景下希望基于某种条件下提前中断持续性的字符串收集过程,则需注意设计合理的逻辑控制结构来满足需求[^2]. 比如采用while循环配合getline方法不断请求新行直至遇见特殊标记信号才允许跳出循环继续后续流程执行. ```cpp #include <iostream> #include <string> using namespace std; int main(){ string line; while(getline(cin,line)){ if(line == "exit") break; // 当输入 exit 则退出循环 cout<<line<<"\n"; } cout<<"已退出循环\n"; return 0; } ``` 上述实例展示了如何构建这样一个简单的交互界面,只要不是键入"exit", 那么每次回车后都将重复打印刚才录入的一整条记录;而一旦发现匹配关键字则立刻停止采集动作转而运行余下部分指令序列. ### 总结 综上所述,借助于`std::getline()`能够轻松解决传统`cin>>`无法妥善应对多词组间存在间隔情况的问题,并且还支持额外设定个性化截止界限以便适应更多实际应用场景的需求^.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荞麦壳枕头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值