解密输入输出迷局:蓝桥杯与ACM中C++/C语言常见问题揭秘

关于C++中的常见输入输出汇总

带空格的字符串:

​ 对于这种输入方式我们选择使用gets() 函数来进行输入,gets用于从标准输入(通常是键盘)读取一行文本并将其存储为字符串,直到遇到换行符(‘\n’)为止的所有字符。

#include <iostream>
#include <algorithm>
#include<cstring>
using namespace std;
typedef long long LL;int main()
{char arr[100];gets(arr);  cout<<arr<<endl;cout<<strlen(arr)<<endl;// 字符型return 0;
}

在这里插入图片描述

使用gets函数能解决很多问题,所有也推荐给大家使用。

那么如果我们想让输入的数据从下标1开始呢?

#include <iostream>
#include <algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
int main()
{char arr[100];gets(arr+1);   //+1 就是从1开始 此时 下标为的0的位置使用了,但是没有赋值cout<<arr<<endl;cout<<arr[0]<<endl;cout<<strlen(arr)<<endl;return 0;
}

在这里插入图片描述

字符比较:

​ 字符会按照ASECII码一个个进行比较,C++会将字符串从第一个字符开始逐个进行比较,直到找到不同的字符,然后根据不同字符的字典序来确定比较结果。
​ 当一个整数与一个字符相加时,会将整数视为其对应的ASCII码。因此,4 + 'a’的结果是一个数字.

#include <iostream>
#include <algorithm>
#include<cstring>
using namespace std;typedef long long LL;int main()
{cout<<'a'+2<<endl;//结果是99 cout<<('a'>'b')<<endl;//97>98cout<<('a'<'b')<<endl;//97<98cout<<('a'=='a')<<endl;return 0;
}

在这里插入图片描述

字符串输入:

对于字符串一般有两种输入方式,要么当成字符数组,要么当成string。
string:

​ 当作string的类型的时候,会不能读入空格和回车如下.

#include <iostream>
#include <algorithm>
#include<cstring>
#include<string>
using namespace std;typedef long long LL;int main()
{string a;cin>>a;cout<<a[0]<<" "<<a.length()<<endl;cout<<a<<endl;return 0;
}

在这里插入图片描述

字符数组:
#include <iostream>
#include <algorithm>
#include<cstring>
#include<string>
using namespace std;typedef long long LL;int main()
{char ne[1000];cin>>ne+1;  //从下标为1开始读入,如果不写一般从0开始cout<<ne[0]<<endl;cout<<ne[1]<<endl; return 0;
}

在这里插入图片描述

当然更推荐使用scanf来进行读入,scanf的读入效率比cin快好几倍。

#include <iostream>
#include <algorithm>
#include<cstring>
#include<string>
using namespace std;typedef long long LL;int main()
{char ne[1000];scanf("%s",ne+1);//%s 表示字符串类型   ne+1表示下标为1的元素所在地址cout<<ne[0]<<endl;cout<<ne[1]<<endl;return 0;
}

关于多组输入:

​ 在一些算法题中,可能会个操作,比如1代表某种操作,2代表某种操作,可能一般会说从输入0,0代表结束,我们应该这样写。

 while (cin >> a >> b , a||b) //a和b同时为0 逻辑或运算为0 {if (a > b) swap(a, b);for (int i = 0; i <= 9; i ++ )cout << count(b, i) - count(a - 1, i) << ' ';cout << endl;}

二维数组:

​ 在一些题目中,如果想让我输出二维数组中的每一个元素,我们应该怎么输入呢?char[10][8]其实是由10个一维数组构成的,每一个一维数组长度是8.

#include <iostream>
#include <algorithm>
#include<cstring>
#include<string>
using namespace std;typedef long long LL;int main()
{char ne[10][10]={"asasd","adnks"};for(int i=0;i<2;i++) puts(ne[i]); //一维数组return 0;
}

在这里插入图片描述

关于oj速度:

​ 在算法题中一般要求是1s1s一般应该将时间复杂度控制在107-108 比较好,当然了我们可以在输入输出上做一些操作,减少输入输出上的时间。

​ 建议使用scanf代替cin,用printf代替cout,如果输入数据比较多,可以提高好几倍的速度。

输出:

printf() 是C语言中用于输出格式化字符串的函数。它的基本语法是:
printf("format string", arguments),这里大家可以理解前面第一个参数是一个带有占位符的参数,后面的参数就是真正代替占位符的变量值。
format string 中可以包含普通的字符,用于直接输出,也可以包含转换说明符,用于格式化输出。

  • %d:用于输出带符号的十进制整数。
  • %u:用于输出无符号的十进制整数。
  • %f:用于输出浮点数。
  • %c:用于输出字符。
  • %s:用于输出字符串
  • %p:用于输出指针的地址。
  • %x:用于输出十六进制整数(小写字母)。
  • %X:用于输出十六进制整数(大写字母)。
  • %o:用于输出八进制整数。
printf("Number: %d\n", num);  // num 会代替%d 这个值
printf("Pi: %.2f\n", pi); //pi 会代替  %.2f 这个值
printf("Letter: %c\n", letter);//letter 会代替%c 
printf("Name: %s\n", name);
// 结果-----------------
Number: 42
Pi: 3.14
Letter: A
Name: John
scanf("%d",&n); //如果数据量比较大的时候,一般使用c语言格式进行输入!!!
printf("%d",arr[i]) //c语言输出

注意:printf 不会在输出结尾出自动添加换行符号。 可以添加\n.

输入:

一般使用C语言读入方式读入整数和字符,语法:

  • scanf("类型",地址)
scanf("%d%d",&n,&k);
scanf("%d", &a[i]);
scanf("%d",&n);  //输入一个整数 
    scanf("%d %d %d", &num1, &num2, &num3);
常量输出:

printf 不会在输出结尾出自动添加换行符号。

printf("%d ",skt[tt])
printf("-1 ")

​ puts 函数会自动在结尾处添加换行符号,puts函数只能用于输出字符串,而不支持格式化输出。如果你需要输出其他类型的数据或者进行格式化输出,应该使用printf函数。一句话:只能输出长亮。

puts("Yes");
puts(""); //会自动输出回车
puts(str); //会自动换行
puts(str+1); //从下标为1的开始输出

初始化数组:

memset 是 C 和 C++ 中的一个函数,用于将一块内存设置为指定的值。

void *memset(void *ptr, int value, size_t num);

其中:

  • ptr 是指向要设置的内存块的指针。
  • value 是要设置的值,通常是一个整数,字节。
  • num 是要设置的字节数。

memset 函数将 ptr 指针所指向的内存块的前 num 个字节都设置为 value。它可以用来快速初始化内存块,将其填充为指定的值.

#include <stdio.h>
#include <string.h>int main() {int array[5];// 将数组元素设置为 0memset(array, 0, sizeof(array));// 打印数组元素for (int i = 0; i < 5; i++) {printf("%d ", array[i]);}printf("\n");return 0;
}

常用的值:

memset(array, 0, sizeof(array)); //数组都初始化为0
memset(array, -1, sizeof(array));//都初始化-1
memset(array, 0x3f, sizeof(array));//都初始化为0x3f3f3f3f

总结:

在本文中,我们深入探讨了蓝桥杯、ACM等比赛中常见的C++和C语言输入输出问题。通过案例分析,我们学习了字符输入、字符串输入、二维数组以及puts()、printf()、scanf()、memset()等函数的使用技巧。同时,我们也对比了C++的输入流对象cin和C语言的输入函数scanf的效率。

在实际比赛中,了解这些输入输出迷局的解决方法至关重要。通过掌握正确的技巧和函数使用方式,我们可以更高效地处理输入输出,节省宝贵的时间和精力。然而,需要注意的是,尽管scanf函数在效率上可能稍优于cin流对象,但cin提供了更高的安全性和可靠性,能够处理更广泛的输入情况,特别是对于字符串输入和格式化输入。因此,在实际应用中,我们应根据具体情况选择合适的输入输出方式。

希望本文能为您在蓝桥杯、ACM或其他编程比赛中遇到的输入输出问题提供一些帮助。通过深入理解这些常见问题的解决方法,我们可以更自信、更高效地应对挑战,展示出我们在编程领域的才华和技能。祝您取得优异的成绩~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/674277.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

由繁化简 Q-Automation助力自动化测试管理

Q-Automation是基于ATX的自动化测试管理软件&#xff0c;用于测试电子控制单元&#xff08;ECU&#xff09;。该软件支持诊断协议层测试和诊断功能测试&#xff0c;且只需填写Excel表格&#xff0c;即可实现半自动化测试需求&#xff0c;从而缩短用户的测试周期。此外&#xff…

【Linux】基于UDP协议的“聊天室”

目录 预备知识 基本思路 服务端设计 重要接口详解 服务端核心代码 服务端运行代码 客户端设计 预备知识 UDP协议&#xff08;User Datagram Protocal用户数据报协议&#xff09; 传输层协议无连接不可靠传输面向数据报 基本思路 如下是我们设计的一个简单的“聊天室…

CRNN介绍:用于识别图中文本的深度学习模型

CRNN&#xff1a;用于识别图中文本的深度学习模型 CRNN介绍&#xff1a;用于识别图中文本的深度学习模型CRNN的结构组成部分工作原理 CRNN结构分析卷积层&#xff08;Convolutional Layers&#xff09;递归层&#xff08;Recurrent Layers&#xff09;转录层&#xff08;Transc…

嵌入式学习之Linux入门篇笔记——13,Linux第一个程序HelloWorld

配套视频学习链接&#xff1a;http://【【北京迅为】嵌入式学习之Linux入门篇】 https://www.bilibili.com/video/BV1M7411m7wT/?p4&share_sourcecopy_web&vd_sourcea0ef2c4953d33a9260910aaea45eaec8 1.什么是 gcc&#xff1f; gcc 全称&#xff08;gun compiler…

目标检测 | 卷积神经网络(CNN)详细介绍及其原理详解

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种深度学习模型&#xff0c;主要用于图像识别和计算机视觉任务。它的设计灵感来自于生物学中视觉皮层的工作原理。CNN的核心思想是通…

【人工智能】横扫市场的巨星大模型:探秘当今最热门的AI力量

今年&#xff0c;ChatGPT成了大家的明星&#xff0c;简直是个神奇的助手&#xff01;问什么问题&#xff0c;都秒回&#xff0c;写各种文字、甚至代码&#xff0c;简直是工作利器。而国内这半年AI领域热度不减&#xff0c;涌现了一批新公司和产品&#xff0c;大厂也在风头上。A…

FPGA高端项目:解码索尼IMX327 MIPI相机转USB3.0 UVC 输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX327 及其配置MIPI CSI RX图像 ISP 处理图像缓存UVC 时序USB3.0输出架构FPGA逻辑设计工程源码架构SDK软件工程源…

从Unity到Three.js(安装启动)

发现在3D数字孪生或模拟仿真方向&#xff0c;越来越多的公司倾向使用Web端程序&#xff0c;目前一直都是使用的Unity进行的Web程序开发&#xff0c;但是存在不少问题&#xff0c;比如内存释放、shader差异化、UI控件不支持复制或输入中文等。虽然大多数问题都可以找到解决方案&…

通过nginx学习linux进程名的修改

目录 1. 缘起2. 背景知识3. 源码分析3.1 准备工作3.2 设置进程名字 1. 缘起 在运行nginx的时候&#xff0c;用ps查看nginx的进程信息&#xff0c;可能的输出如下&#xff1a; root 42169 3105 0 16:51 ? 00:00:00 nginx: master process ./objs/nginx root …

STM32/C51开发环境搭建(KeilV5安装)

Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统&#xff0c;与汇编相比&#xff0c;C语言在功能上、结构性、可读性、可维护性上有明显的优势&#xff0c;因而易学易用。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等…

【SpringBoot】策略和模板模式的思考与实践

一、应用场景 之所以会将策略和模板模式放在一起&#xff0c;是因为这两种模式用的最多最广泛&#xff0c;而且基本都是联合使用的。在开始之前&#xff0c;先复习一下模式的定义&#xff1a; 模板模式&#xff08;Template Pattern&#xff09; 模板模式是在一个抽象类中定…

python+flask人口普查数据的应用研究及实现django

作为一款人口普查数据的应用研究及实现&#xff0c;面向的是大多数学者&#xff0c;软件的界面设计简洁清晰&#xff0c;用户可轻松掌握使用技巧。在调查之后&#xff0c;获得用户以下需求&#xff1a; &#xff08;1&#xff09;用户注册登录后&#xff0c;可进入系统解锁更多…

C#,栅栏油漆算法(Painting Fence Algorithm)的源代码

1 刷油漆问题 给定一个有n根柱子和k种颜色的围栏&#xff0c;找出油漆围栏的方法&#xff0c;使最多两个相邻的柱子具有相同的颜色。因为答案可以是大的&#xff0c;所以返回10^97的模。 计算结果&#xff1a; 2 栅栏油漆算法的源程序 using System; namespace Legalsoft.Tr…

Jetpack Compose之进度条介绍(ProgressIndicator)

JetPack Compose系列&#xff08;12&#xff09;—进度条介绍 Compose自带进度条控件有两个&#xff0c;分别是&#xff1a;CircularProgressIndicator&#xff08;圆形进度条&#xff09;和LinearProgressIndicator&#xff08;线性进度条&#xff09;。 CircularProgressIn…

Codeforces Round 923 (Div. 3)D. Find the Different Ones! 双指针

Problem - D - Codeforces 双指针O(2n)&#xff0c;其实本场B题我写的是O(26n)&#xff0c;结果这道题不敢想哈哈。 题意就是给你一串数字&#xff0c;然后问区间(l , r)内是否有不同的数字&#xff0c;输出任意一组下标即可&#xff0c;没有就输出 -1 -1 所以我们看l 在 l1~…

【51单片机】实现一个动静态数码管显示项目(超全详解&代码&图示)(5)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机 系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY…

Redis篇之集群

一、主从复制 1.实现主从作用 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。主节点用来写的操作&#xff0c;从节点用来读操作&#xff0c;并且主节点发生写操作后&#xff0c;会把数据同…

Web后端开发:登录认证案例

登录功能 需求分析 在登录界面中&#xff0c;输入用户的用户名以及密码&#xff0c;然后点击 “登录” &#xff0c;服务端判断用户输入的用户名和密码是否都正确。如果正确&#xff0c;则返回成功结果&#xff0c;前端跳转至系统首页面&#xff1b;否则报错&#xff0c;停留在…

从零开始手写mmo游戏从框架到爆炸(十)— 集成springboot-jpa与用户表

导航&#xff1a;从零开始手写mmo游戏从框架到爆炸&#xff08;零&#xff09;—— 导航-CSDN博客 集成springboot-jpa&#xff0c;不用mybatis框架一个是方便对接不同的数据源。第二个目前规划的游戏内容可能对数据库的依赖不是很大&#xff0c;jpa应该肯定能满足要求了…

Unity类银河恶魔城学习记录4-1,4-2 Attack Logic,Collider‘s collision excepetion源代码 P54 p55

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic; u…