C++14后如何读入一行带空格的一行字符串

2023-10-29

前文:
在c++11标准及之前,仍可以使用gets读入,但是c++14正式删除了gets这一不安全的读入。由于读入对空格的自动忽略,所以需要其他读入函数来处理带空格的字符串。

具体读入方式:

一、字符数组


A、std::cin.getline(str, size)
#include<iostream>
int main() {
	char str[100];
	std::cin.getline(str, 100);
	std::cout << str << "\n";
	return 0;
}

表示你可以从索引 0 0 0开始读入至多 99 99 99个字符,最后一个留给'\0'
getline遇到换行后,会停止继续读入并且过滤掉换行。


B、std::cin.get(str, size)
#include<iostream>
int main() {
	char str[100];
	std::cin.get(str, 100);
	std::cout << str << "\n";
	return 0;
}

注意:
cin.get()cin.get(str, size)
cin.get()可以读入任何字符
cin.get(str, size)不能过滤换行,即遇到换行符就结束读入,并且换行符仍然会丢在缓冲区。

如下程序一个停留在缓冲区的换行符将会使得下面的所有get读入都失效。

#include<iostream>
#include<cstring>
using namespace std;

int main()
{
	char s1[10], s2[10], s3[10];
	cin.get(s1, 10);
	cin.get(s2, 10);
	cin.get(s3, 10);
	cout << strlen(s1) << " : "<< s1 << "\n";
	cout << strlen(s2) << " : "<< s2 << "\n";
	cout << strlen(s3) << " : "<< s3 << "\n";
	return 0;
}

输出:

100
3 : 100
0 :
0 :

解决办法:在get读入完成后再用一次get将换行手动过滤掉:
cin.get(str, 100).get();


C、scanf("%[^\n]", str)

get类似,也不会过滤换行:具体操作如下。

#include<cstdio>
int main()
{
	char str[100];
	scanf("%[^\n]", str); getchar();
	printf("%s\n", str);
	return 0;
}

为了保证不出类似的错误,建议所有的scanf后都跟一个getchar过滤换行符。


D、fgets(str, size, stdin)

为了解决gets的读入安全问题,fgets中添加了读入的最长长度size,不过fgets会读入换行符。如下:

#include<cstdio>
#include<cstring>
using namespace std;

int main()
{
	char str[10];
	fgets(str, 10, stdin);
	for(int i = 0; i < strlen(str); ++i) {
		if(str[i] == '\n') printf("x");
		else printf("%c", str[i]);
	}
	return 0;
}

运行结果:

input:
123

output:
123x

所以如果不需要的换行符时可以str[strlen(str)-1]='\0'将换行符去除。


二、string

A、getline(std::cin, s)
#include<iostream>
#include<string>
int main()
{
	std::string s;
	getline(std::cin, s);
	std::cout << s << "\n";
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++14后如何读入一行带空格的一行字符串 的相关文章

  • virtualBox虚拟机没有64位选项

    问题解决 首先 你要确认你的CPU是64位的 如果是那么继续查看 然后 进入BIOS将 intel virtual technology 设置为 enable 如何进入BIOS 自行百度 根据自己电脑型号搜索一般是开机按F2 联想z470
  • react学习笔记-从井字棋开始(2)

    前言 接着前面的空格子棋 加上其他功能变成真正的井字棋 数字显示添加 传值 prop 方式 修改 Board 类的renderSquare函数 class Board extends React Component renderSquare
  • 一个数组实现两个栈(共享栈)

    题目 一个数组实现两个栈 方法1 下标为0的位置为栈1的栈底 下标为1的位置为栈2的栈底 栈1的元素存放在下标为偶数的位置上 栈2的元素放在下标为奇数的位置上 如上图所示的数组 若栈1有一个元素 2 栈2有6个元素 1 2 3 4 5 6
  • UnityShader _Object2World与UNITY_MATRIX_MVP被替换

    1 Object2World 模型空间转世界空间 Unity5 5版本中 Object2World已经变成unity ObjectToWorld World2Object也变成了unity WorldToObject 但由于Unity的向下
  • Macos安装brew攻略

    Brew Macos的apt get和软件安装快捷方式 Brew install offiical site https brew sh install instruction bin bash c curl fsSL https raw
  • java批量插入数据库之写绑定变量

    最近查到关于sql批量写入和绑定变量的问题 看到了很多好的帖子 再次进行总结 数据库在执行SQL语句时会首先解析SQL语句 解析又分为硬解析与软解析 说到硬解析和软解析 就不能不说一下Oracle对sql的处理过程 当你发出一条sql语句交
  • Linux C 多线程

    为什么会有线程 gt gt gt gt 进程实现多任务的缺点 进程间切换的计算机资源开销很大 切换效率非常低 进程间数据共享的开销也很大 线程和进程的关系 线程是进程的一个执行单元 是进程内的调度实体 比进程更小的独立运行的基本单位 线程也

随机推荐

  • In-Doubt Transactions

    In Doubt Transactions The two phase commit mechanism ensures that all nodes either commit or perform a rollback together
  • 常用的PHP命令执行函数及利用方式

    PHP命令执行函数常配合代码执行漏洞使用 利用命令执行函数执行操作系统命令 从而发起攻击 接下来就简单分享几个常用的PHP命令执行函数 system system 函数可以执行系统命令 并将命令执行的结果直接输出到界面中 使用时直接在参数中
  • 初窥Linux神秘面纱(叁):基本指令讲解(下)及疑难解惑(精)

    目录 date指令 cal指令 find指令 grep指令 alias指令 wc指令 whereis指令 zip unzip指令 tar指令 date指令 date 指定格式显示时间 date Y m d date 用法 date OPTI
  • Linux驱动入门(6.2)按键驱动和LED驱动 --- 将逻辑电平与物理电平分离

    前言 1 在学习完Linux驱动入门 6 LED驱动 设备树之后 我们发现一个问题 设备树明明的gpios信息明明有三个元素gpios lt gpio5 3 GPIO ACTIVE LOW gt gpio5 3 用来确定控制那个引脚 而GP
  • [4G&5G专题-127]:5G培训部署篇-4-基站项目的安装与验收过程

    作者主页 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 118456868 目录 第1部分 基站项目的安装与
  • 快排函数

    C 语言中排序的算法有很多 系统也提供一个函数qsort 可以实现快速排序 它包含在
  • 水浊度传感器( ADC 代码详解)

    水浊度传感器 最后代码已上传 代码文章链接 github 代码链接在该文章最后 文章目录 硬件使用 软件使用 实现说明 水浊度原理 具体操作代码说明 配置通道规则 开启软件转换 判断转换完成 读取 ADC 值 计算水浊度 通过串口发送到串口
  • spring-cloud - 部署

    一 jenkins git部署 1 1 jenkins git安装 1 2 jenkins项目配置 1 3 git配置触发器 二 docker部署 2 1 打包 根据项目pom中配置利用mvn package 进行打包生成jar docke
  • 教你如何用命令行装逼,做一个有逼格的程序员

    教你如何用命令行装逼 做一个有逼格的程序员 事先声明 如果你不知道打开windows的命令行工具 我是绝对不会告诉你是用 windows R 然后键入 cmd 打开的 windows 自带的命令行工具很强大 毕竟计算机一开始都是以键入命令的
  • python爬虫八:多任务线程

    1 多线程 举例 有很多的场景中的事情是同时进行的 比如开车的时候 手和脚共同来驾驶汽车 再比如唱歌跳舞也是同时进行的 定义 线程是进程的一个实体 是CPU调度和分派的基本单位 它是比进程更小的能独立运行的基本单位 线程自己基本上不拥有系统
  • 基于PTB数据集实现RNN-LSTM循环神经网络(智能填词)

    本篇直入主题 做一篇学习的记录 在学习RNN的时候 跟着教程敲了一个案例 分为处理方法文件 神经网络模型文件 训练方法文件 测试文件 所有的操作和重要内容都在代码中作了详细的注释 一 目标神经网络模型 二 数据集 PTB数据集下载地址 ht
  • series选取值_Series和DataFrame的数据取值与选择

    数据取值与选择 NumPy数据取值的方法 包括取值操作 如arr 2 1 切片操作 如arr 1 5 掩码操作 如arr arr gt 0 花哨的索引操作 如arr 0 1 5 以及组合操作 如arr 1 5 在NumPy的二维数组里 da
  • qt触摸屏调试(tslib1.21 + qt5.12.9)

    过程是痛苦的 因为之前没调试过qt 也没啥总结的 可能换个设备还是慢慢摸索调试 前文已介绍了如果编译 tslib和qt 且非常详细 那个步骤现在看没有问题 我在调试qt的时候 翻看了好多遍前文编译的库 看编译过程是否有问题 我这不叫写文章
  • excel文件无法打印提示内存不足_打开Excel时,提示“Excel词典(XLLEX.DLL)文件丢失或损坏”...

    使用的是OFFICE2007完整版 一直都是正常的 突然打开Excel时 提示 Excel词典 XLLEX DLL 文件丢失或损坏 怎么办 打开Excel时 提示 Excel词典 XLLEX DLL 文件丢失或损坏 答 出现这种情况 是因为
  • 使用Apache CXF和Apache Axis2实现Web Services客户端

    记录 314 场景 在Spring Boot微应用上 使用Apache CXF框架实现Web Services客户端 调用Web Services服务端 使用Apache Axis2框架实现Web Services客户端 调用Web Ser
  • python判断某一字符是否在字符串中的函数_Python实现判断字符串中包含某个字符的判断函数示例...

    Python实现判断字符串中包含某个字符的判断函数示例 本文实例讲述了Python实现判断字符串中包含某个字符的判断函数 分享给大家供大家参考 具体如下 coding utf8 参数包含两个 containVar 查找包含的字符 strin
  • 【声音

    gbcax链交所 声音 众鼎集团董事长张哲仁 目前应专注区块链赋能实体经济 众鼎集团董事长张哲仁在第十二届上海金洽会之首届区块链论坛上表示 现在只有将发展重心聚焦应用场景落地 专注区块链赋能实体经济 才是未来区块链的正确发展方向
  • 医学成像中的深度学习——基于PyTorch的3D 医学图像分割

    深度学习和医学成像 计算机视觉领域深度网络的兴起为经典图像处理技术表现不佳的问题提供了最先进的解决方案 在图像识别的广义任务中 包括目标检测 图像分类和分割 活动识别 光流和姿态估计等问题 我们可以很容易地声称 DNN 深度神经网络 取得了
  • npm login 时报错npm ERR! code E403

    npm ERR code E403 npm ERR 403 403 Forbidden PUT https registry npmmirror com user org couchdb user jieyucx FORBIDDEN Pub
  • C++14后如何读入一行带空格的一行字符串

    前文 在c 11标准及之前 仍可以使用gets读入 但是c 14正式删除了gets这一不安全的读入 由于读入对空格的自动忽略 所以需要其他读入函数来处理带空格的字符串 具体读入方式 一 字符数组 A std cin getline str