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

news2024/9/22 0:05:32

关于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>98
	cout<<('a'<'b')<<endl;//97<98
	cout<<('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];
    // 将数组元素设置为 0
    memset(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.coloradmin.cn/o/1440824.html

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

相关文章

Fink CDC数据同步(四)Mysql数据同步到Kafka

依赖项 将下列依赖包放在flink/lib flink-sql-connector-kafka-1.16.2 创建映射表 创建MySQL映射表 CREATE TABLE if not exists mysql_user (id int,name STRING,birth STRING,gender STRING,PRIMARY KEY (id) NOT ENFORCED ) WITH (connector mysql-cdc,hostn…

飞书上传图片

飞书上传图片 1. 概述1.1 访问凭证2. 上传图片获取image_key1. 概述 飞书开发文档上传图片: https://open.feishu.cn/document/server-docs/im-v1/image/create 上传图片接口,支持上传 JPEG、PNG、WEBP、GIF、TIFF、BMP、ICO格式图片。 在请求头上需要获取token(访问凭证) …

go消息队列RabbitMQ - 订阅模式-fanout

1、发布订阅 订阅模式&#xff0c;消息被路由投递给多个队列&#xff0c;一个消息被多个消费者获取。 1&#xff09; 可以有多个消费者 2&#xff09; 每个消费者有自己的queue&#xff08;队列&#xff09; 3&#xff09; 每个队列都要绑定到Exchange&#xff08;交换机&…

Linux系统安装(CentOS Vmware)

学习环境安装 VMware安装 VMware下载&安装 访问官网&#xff1a;https://www.vmware.com 在此处可以选择语言 点击China&#xff08;简体中文&#xff09; 点击产品&#xff0c;点击Workstation Pro 下滑&#xff0c;点击下载试用版 下滑找到Workstation 17 Pro for Wi…

ARP欺骗攻击利用之内网截取图片

Arp欺骗&#xff1a;目标ip的流量经过我的网卡&#xff0c;从网关出去。 Arp断网&#xff1a;目标ip的流量经过我的网卡 1. echo 1 >/proc/sys/net/ipv4/ip_forward 设置ip流量转发&#xff0c;不会出现断网现象 有时不能这样直接修改&#xff0c;还有另外一种方法 修…

基于华为云欧拉操作系统(HCE OS)容器化部署传统应用(Redis+Postgresql+Git+SpringBoot+Nginx)

写在前面 博文内容为 华为云欧拉操作系统入门级开发者认证(HCCDA – Huawei Cloud EulerOS)实验笔记整理认证地址&#xff1a;https://edu.huaweicloud.com/certificationindex/developer/9bf91efb086a448ab4331a2f53a4d3a1博文内容涉及一个传统 Springboot 应用HCE部署&#x…

使用QT编写一个简单QQ登录界面

widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//设置窗口标题this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(…

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 &#xff08;都是傻瓜式安装&#xff09;&#xff0c;然后注册小程序账号&#xff1a; 拿到appid&#xff1a; ②简单通过demo使用微信开发者工具和…

Linux——进程池(管道)

经过了管道的介绍之后&#xff0c;我们可以实现了进程间通信&#xff0c;现在我就来简单介 绍一下管道的应用场景——进程池。1. 引入 在我们的编码过程中&#xff0c;不乏会听到&#xff0c;内存池&#xff0c;进程池&#xff0c;空间配置器等等名词&#xff0c;这些是用来干…

spring boot学习第十二篇:mybatis框架中调用存储过程控制事务性

1、MySQL方面&#xff0c;已经准备好了存储过程&#xff0c;参考&#xff1a;MYSQL存储过程&#xff08;含入参、出参&#xff09;-CSDN博客 2、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"…

zer0pts-2020-memo:由文件偏移处理不正确--引发的堆溢出

启动脚本 #!/bin/sh qemu-system-x86_64 \-m 256M \-kernel ./bzImage \-initrd ./rootfs.cpio \-append "root/dev/ram rw consolettyS0 oopspanic panic1 kaslr quiet" \-cpu kvm64,smep,smap \-monitor /dev/null \-nographic -enable-kvm/ # dmesg | grep page …

电商小程序01需求分析

目录 1 电商用例分析2 功能架构3 原型开发3.1 首页3.2 店铺页面3.3 配货单3.4 配货单有货3.5 我的应用3.6 商品详情3.7 订单确认3.8 收货地址3.9 店铺详情3.10 店铺分类3.11 商品分类 总结 低代码学习的时候最高效的方法就是带着问题去学习&#xff0c;一般可以先从电商小程序开…

507. Perfect Number(完美数)

题目描述 对于一个 正整数&#xff0c;如果它和除了它自身以外的所有 正因子 之和相等&#xff0c;我们称它为 「完美数」。 给定一个 整数 n&#xff0c; 如果是完美数&#xff0c;返回 true&#xff1b;否则返回 false。 问题分析 按照题目要求找出每一个因子&#xff0c…

H12-821_74

74.在某路由器上查看LSP&#xff0c;看到如下结果&#xff1a; A.发送目标地址为3.3.3.3的数据包时&#xff0c;打上标签1026&#xff0c;然后发送。 B.发送目标地址为4.4.4.4的数据包时&#xff0c;不打标签直接发送。 C.当路由器收到标签为1024的数据包&#xff0c;将把标签…

文心一言 VS 讯飞星火 VS chatgpt (196)-- 算法导论14.3 4题

四、用go语言&#xff0c;给定一棵区间树 T 和一个区间 i &#xff0c;请描述如何在 O(min(n&#xff0c;klgn)) 时间内列出 T 中所有与 i 重叠的区间&#xff0c;其中 k 为输出的区间数。(提示:一种简单的方法是做若干次查询&#xff0c;并且在这些查询操作中修改树&#xff0…

Java图形化界面编程—— 基本组件和对话框 笔记

2.5 AWT中常用组件 2.5.1 基本组件 组件名功能ButtonButtonCanvas用于绘图的画布Checkbox复选框组件&#xff08;也可当做单选框组件使用&#xff09;CheckboxGroup选项组&#xff0c;用于将多个Checkbox 组件组合成一组&#xff0c; 一组 Checkbox 组件将只有一个可以 被选中…

[word] word中怎么插入另外一个word文档 #媒体#职场发展

word中怎么插入另外一个word文档 word中怎么插入另外一个word文档&#xff1f;有有些小伙伴在制作文档的时候&#xff0c;可能需要用到多个文档进行配合制作&#xff0c;今天小Q来给大家演示一下&#xff0c;插入Word文档的方法&#xff0c;插入其他类型文档的方法也是一样的。…

notepad++成功安装后默认显示英文怎么设置中文界面?

前几天使用电脑华为管家清理电脑后&#xff0c;发现一直使用的notepad软件变回了英文界面&#xff0c;跟刚成功安装的时候一样&#xff0c;那么应该怎么设置为中文界面呢&#xff1f;具体操作如下&#xff1a; 1、打开notepad软件&#xff0c;点击菜单栏“Settings – Prefere…

Qt简易登录界面

代码&#xff1a; #include "mywidget.h" #include "ui_mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent), ui(new Ui::MyWidget) {ui->setupUi(this);ui->background->setPixmap(QPixmap(":/qt picture/logo.png"))…

C++:二叉搜索树模拟实现(KV模型)

C&#xff1a;二叉搜索树模拟实现&#xff08;KV模型&#xff09; 前言模拟实现KV模型1. 节点封装2、前置工作&#xff08;默认构造、拷贝构造、赋值重载、析构函数等&#xff09;2. 数据插入&#xff08;递归和非递归版本&#xff09;3、数据删除&#xff08;递归和非递归版本…