8.15美团笔试和奇葩赛码网的输入坑

2023-05-16

第一次用赛码网,两个小时的笔试居然有一个半小时在查如何正确输入,最要命的是在本地IDE上可以的输入到了网页上就GG了。看来是leetcode刷多了,文件流那块学的也很糟糕。总结一下下次避免跳坑吧。一行的就不说了,用一个多行输入做例子。

6
beijing nanjing
nanjing shanghai
shanghai wuhan
wuhan beijing
xiamen tianjin
tianjin xiamen

题目大意:

小团多次旅游归来,第一行表示他买过的票的总数n;
后面按时间顺序排好这些票,且小团的出游出发地是不固定的,但最后他一定会回到出发的地方,代表他结束了本次旅游。
那么
beijing nanjing
nanjing shanghai
shanghai wuhan
wuhan beijing
xiamen tianjin
tianjin xiamen

就代表了小团进行了两次旅游

算法非常简单,然鹅我被这个输入浪费了一个小时。

分析:

6是6行,也就是六张票。目标是将每个城市名单独存放,这样考虑使用vector存放string。
cin遇到空格时,认为输入无效,继而执行后面的语句。

cin遇到换行符与空格和tab时结束读取,例如下面的代码:
string str;
cin >> str;
cout << str;
输入:abcdefg hijk

输出结果将会是:abcdefg

分析一下,cin会根据你定义的数据类型,从输入流中读进去一个该类型数据,直到满足要求或者遇到空格 换行等后完成该次输入。所以用

string s;
cin>>s;

来实现以string类型数据为单位的读取操作。

#include <iostream>
#include<vector>
#include<cstring>
#include<string>
#include<sstream>
int main()
{
	int n;
	cin >> n;
	vector<string> store;
	string s;
	char a;

	while (store.size()<2 * n&&cin >> s) {
		store.push_back(s);
		s.clear();
		if (store.size() == 2*n)
			break;
	}
}

最后的问题解答,全AC,然后做完这个就没时间了哈哈

#include <iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;

int main()
{
	int n;
	cin >> n;
	vector<string> store;
	string s;
	while (store.size()<2 * n&&cin >> s) {
		store.push_back(s);
		s.clear();
		if (store.size() == 2*n)
			break;
	}	
	int count = 1;
	for (int i = 2; i < 2*n; i = i + 2) {
		if (store[i] != store[i - 1])
			count++;
	}
	cout << count << endl;
	return 0;
}

输入流的使用分析

这可能是今天笔试的最大收获了吧

假如我们要输入一个char型:
1.直接复制一个count后,无反应,需要按一下回车,只有c被读入a中。
2.手打,输入c后无反应,可再输入多个字符,遇空格无反应,还需要回车。
故复制和手敲输入在这里没啥区别。。
那么遇空格无效到底怎么理解呢?
输入缓冲机制

这个缓冲机制规定,只有收到回车键,才会将所有输入的数据一次过提交到输入处理函数(就是 cin 或者 scanf 了)
而这个输入过程,在按下回车键之前,是不受到 cin 和 scanf 控制的…

在这里插入图片描述
2.所以说,回车是将输入送到缓冲区,cin再从中读取,其读取过程就和回车无关了。读取的原则就是遇到换行 空格时结束本次读取。
顺便说下换行和空格的区别。再不同编译器,不同系统中,两者的表示不尽相同。我们在赛码网上复制用例时,每行后面其实跟了个换行符‘\r\n’.
如果你认真看了前文,你肯定也会轻松的明白,不管是你输完一行后手动回车,还是直接复制用例(里面包含了换行),起到的效果时一样的。但还是有必要说一下回车换行的区别。

这一部分主要参考这里
https://www.cnblogs.com/dawn-l/p/5180373.html
C/C++ 中,回车符 '\r' 仅表示回到行首,并没有包含换行的动作,换行是由 '\n' 来完成的,初学者一定要分清这两个符号的意义
这里再提一个与 ‘\r’ ‘\n’ 类似的一个转义字符:退格(BS, Backspace)’\b’,顾名思义,这个字符的意义是往前退一格,这里需要特别提醒的是:退格 ‘\b’ 和回车 ‘\r’ 都只是光标的移动,不会删除前面的文本!

现在让我们用一段简单的代码来验证 ‘\r’ ‘\n’ ‘\b’ 的作用效果。

C代码:

 1 #include <stdio.h>
 2 
 3 int main(int argc, char const *argv[])
 4 {
 5     printf("abc\r\ncba\rrr\bz\n");
 6     printf("abcd\b\b");
 7     getchar();
 8 
 9     return 0;
10 }

C++代码:

#include <iostream>

int main(int argc, char const *argv[])
{
    using namespace std;

    cout << "abc\r\ncba\rrr\bz\n";
    cout << "abcd\b\b";
    cin.get();

    return 0;
}

首先我们看下输出的第一行 “abc\r\ncba\rrr\bz\n”:

1.在输出 abc 后 \r 使回车符回到当前行即第一行的行首,但不删除字符,所以第一行最终显示 abc,然后 \n 使光标移到下一行,接着输出 cba,\r再次让光标回到行首,这次不换行,直接接着输出 rr,这样达到的效果是行首两个字符 cb 被替换为 rr,接着 \b 使光标向前一位,输出 z,这样第二个 r 就被换成了 z,然后换行,最终第二行显示结果就是 rza。

2.接着为了更直观地证明只有光标移动而不删除字符,我们看看第二行代码。“abcd\b\b”,在两个 \b 过后,光标向前移动到 c 的下面(或者是 c 上的方块光标,亦或是在 c 前的 I 形光标),为了使光标停留以便观察,我们添加了 getchar() 和 cin.get()。

所以程序运行后的结果将是

abc
rza
abcd 

同时可以看到光标停留在上述位置,当然,这时如果你再输入字符,就会从光标的位置开始向后将 c 甚至 d 覆盖。

哈哈是不是很有意思,这些基础知识有时不太重视,但却很致命。

介绍另一种输入形式:
用getchar()读取一行,通用形式:(这种方法会把空格也读进去

char ch;
while ((ch = getchar()) != '\n')
{
...
}

做一下小实验,a里面存的是’\n’,没有’\r’,这点要注意!!
在这里插入图片描述
改进一下,要是要用getchar()来满足今天笔试题的输入需求,将同一行用空格分开的两个地名分别存起来呢?
方法是这样的,注意最后判断a是’\n’来结束本次输入。

	char a;
	string s;

	while (a = getchar()) {
		if(a !='\n'&& a !=' ')
			s += a;
		else {
			cout << "刚才输入了:" << s << endl;
			s.clear();
			if (a == '\n')
				break;
		}
	}

在这里插入图片描述

读取多行:(加for循环就行,这是不管空格的简化版本,不太符合我们的需求)

	char a;
	string s;
	for (int i = 0; i < 6; i++) {
		while ((a = getchar()) != '\n')
			s += a;

		cout <<"刚才输入了:"<< s << endl;
		s.clear();
	}

在这里插入图片描述
改进一下 OJBK!!

	char a;
	string s;
	for (int i = 0; i < 3; i++){
		while (a = getchar()) {
			if (a != '\n'&& a != ' ')
				s += a;
			else {
				cout << "刚才输入了:" << s << endl;
				s.clear();
				if (a == '\n')
					break;
			}
		}
	}

在这里插入图片描述

3还有getline(cin,s)这个函数,直接读一行,也是不管空格,感觉在某些场景下挺好用。不再赘述。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

8.15美团笔试和奇葩赛码网的输入坑 的相关文章

  • 任务调度的初始化及上下文切换原理

    任务调度的初始化及上下文切换原理 前言任务调度整体框架任务调度初始化源码分析启动第一个任务分析PendSV中断systick定时中断 前言 本文将从调度器的创建为入口 xff0c 通过分析定时器中断以及PendSV中断的原理 xff0c 刨
  • ESXi 防火墙添加自定义端口/关闭开启防火墙

    ESXi 的所有端口都是白名单方式 xff0c 只允许系统默认支持的一些程序配置好的端口 xff0c 你可以选择打开和关闭 xff0c 但是不能在UI界面上自行添加 xff0c 都是预置的 如果需要添加一个新的自定义端口 xff0c 需要通
  • putty连接云服务器超时的解决方法

    putty连接云服务器超时 别用edu xff0c 闪讯等代理的无线网 xff0c 估计是由代理方的安全策略屏蔽了22端口出现问题 我换了手机热点就连上了
  • 去哪儿网2019秋招笔试题

    1 题目描述 xff1a 给出一个由 100 100 之间整数组成的数组 xff0c 求其相加和最大的连续子数组 输入 一个连续整数组成的数组 输出 子数组相加的最大值 样例输入 1 2 3 2 4 6 样例输出 7 2 题目描述 xff1
  • 【Java】JSONarray转JSONobject

    公司开发有用到 xff0c 但是经常会忘记 xff0c 做笔记记录一下 xff01 1 将数据包转成JSONarray 2 使用for循环遍历JSONarray 这里使用size 方法 3 每次循环取到的JSONObject对象 4 再根据
  • 无人机上需要哪些程序? 以及如何进行无人机编程?

    基于WICED的WIFI四轴飞行器 xff0c 手机APP控制 xff08 硬件 核心代码 算法等 xff09 飞行器 电路城 https www cirmall com circuit 4820 details 本设计中四轴飞行器无线控制
  • TypeError: Expected Ptr<cv::UMat> for argument ‘mat‘

    1 xff0c 报错TypeError Expected Ptr xff1c cv UMat xff1e for argument mat 2 xff0c 报错时代码段如下 import cv2 cv2 import numpy as np
  • Keil关于.axf文件报错

    项目场景 xff1a 熟悉Keil C51的同学在使用Keil MDK编译STM32系列单片机时会更容易上手 Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统 xff0c 与汇编相比 xff0c
  • Manjaro安装配置指南

    由于可能会有偶尔重装系统的需要 xff0c 而每次配置都丢三落四 xff0c 浪费时间 xff0c 因此整理了自己需要的配置 xff0c 一直会继续更新的 1 安装 分区时选择手动分区 挂载点大小 boot efi500M boot1G 剩
  • 编程规范

    编程规范 1头文件 放置接口不放置实现 头文件只放置对外接口的声明 函数声明 宏定义 类型定义 xff0c 内部使用的这些声明不应该放在头文件中变量定义在c文件中 xff0c 尽量不要使用全局变量作为接口 xff0c 应通过函数来作为接口
  • antdv动态表单回显

    在项目中经常遇到动态表单的业务 在编辑动态表单时需要回显新增后的内容 本文介绍Ant Design of Vue 的动态表单回显 比如新增时添加了两行动态表单 xff0c 在第二次编辑时需要进行回显 下面是表单的HTML代码 span cl
  • IMU在slam系统中的应用(三)

    在IMU在slam系统中的应用 二 中给出了IMU预积分计算推导以及代码 xff0c 这里给出IMU误差递推方程的推导 xff08 一 xff09 一段时间多个IMU数据预积分量协方差 单个IMU数据作为测量值 xff0c 其噪声方差我们可
  • docker 启动 jenkins 挂载目录权限问题 Permission denied

    通过 docker 挂载目录的 jenkins xff0c 查看 jenkins 日志发现存在一些文件无法写入或者 Permission denied 这样的异常错误 xff0c 基本可以判定是文件所有权问题 比如你宿主机挂载的文件目录是
  • VMware虚拟机硬盘扩展是灰色的

    问题描述 VMware虚拟机硬盘空间不足时 xff0c 想扩展空间 xff0c 但VMware虚拟机硬盘扩展是灰色的 xff0c 无法完成扩展操作 解决方案 进入虚拟机快照管理器 xff0c 删除快照 xff0c 删除后就可以扩容
  • ORB_SLAM2安装与编译报错的解决办法

    目录 1 安装教程 xff08 本教程参考网络课程资料 xff09 1 1 安装前准备 1 2 安装Pangolin 建议源码安装 1 3 安装OpenCV3 4 建议源码安装 1 4 安装Eigen3 3 7 建议源码安装 1 5 安装运
  • ROS安装与报错的解决办法

    目录 1 安装步骤 xff08 1 xff09 添加ROS软件源 xff08 2 xff09 添加秘钥 xff08 3 xff09 安装ROS xff08 4 xff09 初始化rosdep xff08 5 xff09 设置环境变量 xff
  • OpenCV - C++实战(06) — Grabcut图像分割

    目录 第6章 图像分割 6 1 Grabcut实现 6 1 1 定义前景和背景 6 1 2 cv grabCut 6 1 3 cv compare 6 1 4 算法实现 Github代码地址 xff1a GitHub Qinong Open
  • 相机标定 - (02) - 相机标定步骤与原理

    目录 2 相机标定步骤 2 1 张正有标定操作步骤 2 2 张正有标定原理 2 相机标定步骤与原理 参考文章 xff1a 三步骤详解张正友标定法 谜之 摄影爱好者的博客 CSDN博客 1998年 xff0c 张正友提出了基于二维平面靶标的标
  • 相机标定 - (03) - matlab单目相机标定

    目录 3 matlab单目相机标定 3 1 环境配置 3 2 matlab单目相机标定 3 matlab单目相机标定 3 1 环境配置 参考文章 xff1a https www cnblogs com Sandals little p 17
  • SLAM面试笔记(4) — 企业面试汇总

    目录 1 大疆 一面 xff08 50min xff09 二面 xff08 30min xff09 三面 xff08 30min xff09 2 华为 一面 xff08 30min xff09 二面 xff08 30min xff09 三面

随机推荐

  • ORB-SLAM2的稠密重建实战(1) — 流程与函数功能说明

    目录 0 系统整体流程 1 输出信息 2 初始化文件 3 初始化并运行追踪线程Tracking Step1 xff1a 地图初始化 Step2 xff1a 初始化成功 xff08 mbOnlyTracking xff09 Step3 xff
  • SLAM面试笔记(5) — ROS面试

    目录 1 ROS概述 2 ROS通信机制 问题 xff1a 服务通信概念 问题 xff1a 服务通信理论模型 问题 xff1a 参数服务器概念 问题 xff1a 参数服务器理论模型 问题 xff1a 参数服务器实现函数 3 ROS常用命令
  • 多线程常见的面试题

    多线程常见的面试题 xff1a 1 什么是线程和进程 线程与进程的关系 区别及优缺点 xff1f 进程是程序的一次执行过程 xff0c 是系统运行程序的基本单位 xff0c 因此进程是动态的 系统运行一个程序即是一个进程从创建 xff0c
  • docker 错误 WARNING: IPv4 forwarding is disabled. Networking will not work.

    这个错误出现在使用 docker 的服务器上 xff0c 当你进入 docker 容器时 xff0c 如果出现这样的 WARNING 提示 xff0c 则表示服务器没有开启 IPv4 转发 xff0c 按照本文的方法配置开启转发即可 错误提
  • 嵌入式中异常/中断/事件的区别

    嵌入式中异常 xff0f 中断 xff0f 事件的区别 Cortex M3在内核水平上搭载了一个异常响应系统 xff0c 支持为数众多的系统异常和外部中断 其中 xff0c 编号1 15的对应系统异常 xff0c 大于等于16的则都是外部中
  • 【起航】OpenHarmony远征02

    OpenHarmony内核 目前OpenHarmony针对不同量级的系统 xff0c 可以使用不同形态的内核 xff0c 轻量和小型的系统可以使用Liteos xff0c 小型和标准系统可以使用Linux Liteos系统是面向IOT领域的
  • momenta面经总结

    一 C 43 43 01 堆和栈的区别 xff0c 栈的静态分配和动态分配 xff1f 栈由操作系统分配释放 xff0c 用于存放函数的参数值 局部变量等 xff0c 栈中存储的数据的生命周期随着函数的执行完成而结束 堆由开发人员分配和释放
  • Orbslam2使用opencv4解决cv_bridge冲突问题

    在研究orbslam2在opencv4下使用会和cv bridge4冲突 解决方法 xff1a 1条消息 ROS学习 xff1a cv bridge与opencv版本冲突三种解决方案 Mr Qin 的博客 CSDN博客 cv bridge
  • 智能车浅谈——方向控制篇

    文章目录 前言自动控制理论人工控制系统自动控制 方向控制典型环节对应典型环节分析给定环节与给定量比较环节与偏差量控制环节与控制量执行机构舵机PWM技术舵机中值及限幅转向控制 被控对象与被控量反馈对象与反馈量 控制思路结束语智能车系列文章汇总
  • 嵌入式学习笔记——使用寄存器编程操作GPIO

    使用寄存器编程操作GPIO 前言GPIO相关的寄存器GPIO 端口模式寄存器 GPIOx MODER x 61 A I 位操作 GPIO 端口输出类型寄存器 GPIOx OTYPER x 61 A I GPIO 端口输出速度寄存器 GPIO
  • 2021-基于卷积和LSTM神经网络的视频分类时间融合方法在暴力检测中的应用

    A Temporal Fusion Approach for Video Classification with Convolutional and LSTM Neural Networks Applied to Violence Dete
  • uni-app(Vue)直播拉流

    html span class token tag span class token tag span class token punctuation lt span div span span class token attr name
  • Docker 容器常见故障排查及处理

    Docker 容器常见故障排查及处理 本文来源于公司论坛发表的帖子 Docker是一种相对使用较简单的容器 xff0c 我们可以通过以下几种方式获取信息 xff1a 1 通过docker run执行命令 xff0c 或许返回信息 2 通过d
  • CMake教程

    本文参考 xff1a 1 https blog csdn net whahu1989 article details 82078563 2 https blog csdn net kai zone article details 82656
  • docker / containerd 错误 panic: invalid freelist page: 162, page type is leaf

    错误描述 containerd 服务启动失败 xff0c 使用命令 journalctl xe u containerd 查看日志如下所示 xff1a span class token punctuation span root 64 k8
  • 制作自己的rosgo

    制作自己的rosgo 首先 xff0c 什么是rosgo xff1f ROS2GO xff08 ROS To Go xff09 是一款随时可用的高速USB闪存驱动器 xff0c 已安装Ubuntu ROS和常用软件包 xff0c 可以从外部
  • 解决libssl.so.1.0.0 => not found以及libcrypto.so.1.0.0 => not found

    现在的apt源中 xff0c libssl1 0的版本一般是libssl1 0 2 xff0c libcrypto1 0的版本一般是libcrypto1 0 2 但是很多应用要使用libssl so 1 0 0和libcrypto so 1
  • cmake设置默认CMAKE_BUILD_TYPE

    原文 xff1a https cmake org pipermail cmake 2009 June 030311 html 在CMakeLists txt里写入 IF NOT CMAKE BUILD TYPE set CMAKE BUIL
  • 进程:fork的使用

    1 用fork函数创建一个进程 pid t fork void fork函数调用成功 xff0c 返回两次 返回值为0 xff0c 代表当前进程是子进程 返回值非负数 xff08 子进程的进程ID xff09 xff0c 代表当前进程为父进
  • 8.15美团笔试和奇葩赛码网的输入坑

    第一次用赛码网 xff0c 两个小时的笔试居然有一个半小时在查如何正确输入 xff0c 最要命的是在本地IDE上可以的输入到了网页上就GG了 看来是leetcode刷多了 xff0c 文件流那块学的也很糟糕 总结一下下次避免跳坑吧 一行的就