C++中sscanf

简介: sscanf

微信截图_20220414133631.png

#include<bits/stdc++.h>
using namespace std;
void test01(){
  char *str="123456abcde";
  char buff[1024]={0};
  sscanf(str,"%*d%s",buff);
  printf("buf:%s\n",buff);
} 
void test011(){
  char *str="abcde123456";
  char buff[1024]={0};
  sscanf(str,"%*d%s",buff);
  printf("buf:%s\n",buff);
} 
void test02(){
  char *str="123456abcd";
  char buf[1024]={0};
  sscanf(str,"%7s",buf);
  printf("buf:%s\n",buf);
}
void test03(){
  char *str="123456abcd";
  char buf[1024]={0};
  sscanf(str,"%[a-z]",buf);
  printf("buf:%s\n",buf);
}
void test031(){
  char *str="abcd123456";
  char buf[1024]={0};
  sscanf(str,"%[a-z]",buf);
  printf("buf:%s\n",buf);
}
void test04(){
  char *str="abcdAbe123456";
  char buf[1024]={0};
  sscanf(str,"%[Ab]",buf);
  printf("buf:%s\n",buf);
}
void test05(){
  char *str="abcdAbe123456";
  char buf[1024]={0};
  sscanf(str,"%[^e]",buf);
  printf("buf:%s\n",buf);
}
void test06(){
  char *str="abcdAbe123456";
  char buf[1024]={0};
  sscanf(str,"%[^b-z]",buf);
  printf("buf:%s\n",buf);
}
void test07(){
  char *ip="127.0.0.1";
  int a,b,c,d;
  sscanf(ip,"%d.%d.%d.%d\n",&a,&b,&c,&d);
  printf("%d %d %d %d\n",a,b,c,d);
}
void test08(){
  char *a="abcdeghr#$%%";
  char b[1024];
  sscanf(a,"%*9s%s",b);
  printf("b:%s\n",b);
}
void test09(){
  char *a="abcde#fghgfg@44";
  char b[1024];
  sscanf(a,"%*[^#]#%[^@]",b);
  printf("b:%s\n",b);
}
int main(){
  test01();
  test011();
  test02();
  test03();
  test031();
  test04();
  test05();
  test06();
  test07();
  test08();
  test09();
  return 0;
}

例题


题目描述


小h前往美国参加了蓝桥杯国际赛。小h的女朋友发现小h上午十点出发,上午十二点到达美国,于是感叹到“现在飞机飞得真快,两小时就能到美国了”。


小h对超音速飞行感到十分恐惧。仔细观察后发现飞机的起降时间都是当地时间。由于北京和美国东部有12小时时差,故飞机总共需要14小时的飞行时间。


不久后小h的女朋友去中东交换。小h并不知道中东与北京的时差。但是小h得到了女朋友来回航班的起降时间。小h想知道女朋友的航班飞行时间是多少。


对于一个可能跨时区的航班,给定来回程的起降时间。假设飞机来回飞行时间相同,求飞机的飞行时间。


输入


从标准输入读入数据。


一个输入包含多组数据。


输入第一行为一个正整数T,表示输入数据组数。


每组数据包含两行,第一行为去程的 起降 时间,第二行为回程的 起降 时间。


起降时间的格式如下


h1:m1:s1 h2:m2:s2

h1:m1:s1 h3:m3:s3 (+1)

h1:m1:s1 h4:m4:s4 (+2)

表示该航班在当地时间h1时m1分s1秒起飞,


第一种格式表示在当地时间 当日 h2时m2分s2秒降落


第二种格式表示在当地时间 次日 h3时m3分s3秒降落。


第三种格式表示在当地时间 第三天 h4时m4分s4秒降落。


对于此题目中的所有以 h:m:s 形式给出的时间, 保证 ( 0<=h<=23, 0<=m,s<=59 ).


输出


输出到标准输出。


对于每一组数据输出一行一个时间hh:mm:ss,表示飞行时间为hh小时mm分ss秒。


注意,当时间为一位数时,要补齐前导零。如三小时四分五秒应写为03:04:05。


样例输入


3

17:48:19 21:57:24

11:05:18 15:14:23

17:21:07 00:31:46 (+1)

23:02:41 16:13:20 (+1)

10:19:19 20:41:24

22:19:04 16:41:09 (+1)

样例输出


04:09:05

12:10:39

14:22:05

首先先学习游戏getline的用法


getline相比于cin的优势在于可以读取table和空格(可以忽略回车)


#include<iostream>

#include<string>

using namespace std;

int main(){

   string str;

   while(getline(cin,str)){

       cout<<str;

   }

 

   return 0;

}

本题最大的难度在输入


sscanf(用法)


c_str()用法


下面是借鉴来的代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int get_second(int h, int m, int s){
    return h * 3600 + m * 60 + s;
}
int get_time(){
    string line;
    getline(cin, line); //同样忽略输入的回车
    if(line.back() != ')') line += " (+0)";
    int h1, m1, s1, h2, m2, s2, d;
    sscanf(line.c_str(), "%d:%d:%d %d:%d:%d (+%d)", &h1, &m1, &s1, &h2, &m2, &s2, &d);
    return get_second(h2, m2, s2) - get_second(h1, m1, s1) + d * 24 * 3600;
}
int main(){
    int t;
    scanf("%d", &t);
    string line;
   // getline(cin, line); //忽略掉第一行的回车,因为scanf是不读入回车的
    getchar();//读入回车,不知道为什么,读就对了 
    while(t--){
        int time = (get_time() + get_time()) / 2;//去的时间 = 飞行时间 - 时差。回来的时间 =飞行时间 时间 + 时差。去加上回来就减掉,去的时候减去时差回来就加上。所以实际飞行时间= (去的时间 + 回来的时间) / 2
        int hour = time / 3600, minute = time % 3600 / 60, second = time % 60;
        printf("%02d:%02d:%02d\n", hour, minute, second);
    }
    return 0;
}


相关文章
|
10天前
|
存储 关系型数据库 分布式数据库
PostgreSQL 18 发布,快来 PolarDB 尝鲜!
PostgreSQL 18 发布,PolarDB for PostgreSQL 全面兼容。新版本支持异步I/O、UUIDv7、虚拟生成列、逻辑复制增强及OAuth认证,显著提升性能与安全。PolarDB-PG 18 支持存算分离架构,融合海量弹性存储与极致计算性能,搭配丰富插件生态,为企业提供高效、稳定、灵活的云数据库解决方案,助力企业数字化转型如虎添翼!
|
9天前
|
存储 人工智能 Java
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
本文讲解 Prompt 基本概念与 10 个优化技巧,结合学术分析 AI 应用的需求分析、设计方案,介绍 Spring AI 中 ChatClient 及 Advisors 的使用。
401 130
AI 超级智能体全栈项目阶段二:Prompt 优化技巧与学术分析 AI 应用开发实现上下文联系多轮对话
|
3天前
|
存储 安全 前端开发
如何将加密和解密函数应用到实际项目中?
如何将加密和解密函数应用到实际项目中?
197 138
|
9天前
|
人工智能 Java API
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
本文介绍AI大模型的核心概念、分类及开发者学习路径,重点讲解如何选择与接入大模型。项目基于Spring Boot,使用阿里云灵积模型(Qwen-Plus),对比SDK、HTTP、Spring AI和LangChain4j四种接入方式,助力开发者高效构建AI应用。
376 122
AI 超级智能体全栈项目阶段一:AI大模型概述、选型、项目初始化以及基于阿里云灵积模型 Qwen-Plus实现模型接入四种方式(SDK/HTTP/SpringAI/langchain4j)
|
3天前
|
存储 JSON 安全
加密和解密函数的具体实现代码
加密和解密函数的具体实现代码
196 136
|
21天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1347 8
|
8天前
|
监控 JavaScript Java
基于大模型技术的反欺诈知识问答系统
随着互联网与金融科技发展,网络欺诈频发,构建高效反欺诈平台成为迫切需求。本文基于Java、Vue.js、Spring Boot与MySQL技术,设计实现集欺诈识别、宣传教育、用户互动于一体的反欺诈系统,提升公众防范意识,助力企业合规与用户权益保护。
|
20天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1455 87