使用streamstring实现格式化输入

news/2024/5/17 13:16:47/文章来源:https://blog.csdn.net/weixin_43851636/article/details/127008102

目的:在windows系统写c++项目,常用sscanf_s进行格式化输入。但是在ubuntu系统上发现sscanf_s不可用(只有sscanf可用,但是它是c++ 99 的函数了)。后面查阅知道,这个sscanf_s函数是微软专有的函数,不具有跨平台特点。

问题
在ubuntu系统中,使用sscanf_s函数,发现它不在是std命名空间的函数。见下图:
在这里插入图片描述
追溯sscanf_s函数所在的文件<stdio.h>,发现只有sscanf函数,没有sscanf_s函数。

在这里插入图片描述

查阅的资料
查阅资料发现sscanf_s这个函数是微软包装了sscanf,它弥补了标准库函数sscanf函数的安全缺陷。因此sscanf_s在windows系统中已经打包好了,在vs平台可以直接使用,但是在ubuntu 系统中没有sscanf_s函数。
在这里插入图片描述查看sscanf_s,可以参考微软的链接,可以找到sscanf_s,它的具体实现和用法,见下图:
在这里插入图片描述

解决的办法
出现上述的问题有两种方法可以解决
1)使用标准库的函数sscanf代替sscanf_s。
2)使用c++中的iostream流格式化输入,代替上述的功能。

第一种方法替代方案很简单,如果使用标准的sscanf,它的代码可以替换如下:

std::sscanf(idxs.c_str(), "%d/%d", &vi, &vti);

这种格式化输入也可以得到相应的结果。

第二种,较为实用,建议使用iostream解决,给出代码样例如下。

bool ReadFromObjFile(const std::string& path){std::ifstream fh(path);if(fh.fail()){std::cerr << "failed to open " << path << std::endl;return false;}std::vector<Eigen::Vector3d> vertices;std::vector<Eigen::Vector2d> v_vt;std::string str;bool has_vt;    //vertex uvint faces_count = 0;    //count face numberwhile(std::getline(fh, str)){if(str.empty())continue;std::stringstream ss(str);std::string pattern;ss >> pattern;if(pattern == "v"){Eigen::Vector3d v;ss >> v[0] >> v[1] >> v[2];vertices.emplace_back(v);}if(pattern == "vt"){Eigen::Vector2d v;ss >> v[0] >> v[1];v_vt.emplace_back(v);}if(pattern == "f"){HWPolygon* polygon = new HW::HWPolygon();//has_vt =  has_vt = (v_vt.size() == vertices.size()); if(has_vt){std::string idxs;while(ss >> idxs){int vi, vti;std::string item;std::stringstream ssidx(idxs);std::getline(ssidx, item, '/');vi = std::stol(item);std::getline(ssidx, item);vti = std::stol(item);//debug delete later...std::cerr << "vi item: " << vi << std::endl;std::cerr <<"vti item: " << vti << std::endl;}}else{int idx;while(ss >> idx){std::cerr <<"idx : " << idx << std::endl;}}}//std::string}fh.close();return true;}

图上的代码可以得到:
在这里插入图片描述

对于字符串idxs,使用ssidx,默认的是按照" “空格符分开的,使用getline,将其按照”/"来分割。然后使用std的类型转化函数。就可以获取相应的格式化输入。对于这个分割,可以按照格式去设置。

测试的结果,文件的格式如下:
在这里插入图片描述

文件的11行字符串进行格式化输入。它是有1/1是按照"/"进行分割。上面的代码可以输入的结果:
在这里插入图片描述

总结:以后尽量用"iostream"文件中的流函数进行格式化输入,希望对大家有帮助。

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

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

相关文章

linux 竞态与并发编程

前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都开启了学习机器学习&#xff0c;本文就介绍了机器学习的基础内容。 提示&#xff1a;以下是本篇文…

Mapper代理开发

Mapper代理开发一. Mapper代理开发概述二. 使用Mapper代理要求(重点中的重点)三. 实操的代码main目录下的java目录中1. UserMapper接口2. User类3. MybatisDemo类main目录下的resources目录中1. UserMapper.xml2. logback.xml3. mybatis.xml一. Mapper代理开发概述 之前我们写的…

【SpringBoot2】02-SpringBoot中如何修改依赖的版本

Spring Boot 中修改依赖版本 如果默认版本号不合适&#xff0c;我们可以修改版本号。 首先&#xff0c;打开当前项目的 pom.xml 文件&#xff0c;查看 spring-boot-dependencies-2.7.4.pom 中规定当前依赖的版本。 例如&#xff0c;我想修改 MySQL 驱动版本&#xff0c;我先看…

OPSS-PEG-Acrylate,OPSS-PEG-AC,巯基吡啶-聚乙二醇-丙烯酸酯试剂供应

英文&#xff1a;OPSS-PEG-Acrylate&#xff0c;OPSS-PEG-AC 中文&#xff1a;巯基吡啶-聚乙二醇-丙烯酸酯 2、 CAS number&#xff1b; N/A 3、The category&#xff1b;Acrylate/Acrylamide PEG Orthopyridyl disulfide (OPSS) PEG 4、Molecular weight&#xff1a;巯基吡…

队列(C语言)

文章目录前言概念基本操作循环队列少用一个元素空间栈队列前言 本篇进行队列的学习。使用C语言实现 概念 排队是体现了“先来先服务”的原则。 在多道程序运行的计算机系统中&#xff0c;可以同时有多个作业运行&#xff0c;他们的运算结果都需要通过通道输出&#xff0c;若通…

[架构之路-3]:软件架构师也是魔法师,架构师应具备的四大方面的技能

目录 前言&#xff1a; 一、业务能力&#xff08;业务领域&#xff09;-- 面向业务 1.1 业务场景 1.2 业务技能 二、沟通能力&#xff08;管理领域&#xff09; -- 面向“人” 三、技术能力&#xff08;计算机领域&#xff09; -- 面向计算机 3.1 硬件技能 3.2 软件技能…

一个有点意思的网站 - 语雀

在这个平台上面创建了一个文档&#xff1a;CWIKIUS 语雀 Confluence Confluence 的问题就是太臃肿&#xff0c;不兼容 MD 格式。 但是&#xff0c;Confluence 和 JIRA 重度集成&#xff0c;因此成为很多公司文档的标配。 语雀 试用了下这个文档工具&#xff0c;整体上来说…

我们如何一键将录音转换成文字?

最近有很多小伙伴向我求助说&#xff0c;他的职业是一名记者&#xff0c;因为每次采访都要进行对话录音&#xff0c;可是每次结束后都需要再去对录音进行整理&#xff0c;花费了大量的时间。因此他总是在加班&#xff0c;他想改变这一现状却不知道该怎么办。其实我们不必如此麻…

platform.pk8 和platform.x509.pem转jks

/** OpenSSL */ 下载地址&#xff1a;http://slproweb.com/products/Win32OpenSSL.html 环境配置&#xff1a; openssl 安装后查看是否安装成功&#xff0c;需要以管理员身份运行cmd查看 cmd输入openssl出现下面显示&#xff0c;表示配置成功&#xff0c;openssl可以使用 pla…

VUE v-bind 数据绑定

动态的绑定一个或多个 attribute,也可以是组件的 prop。缩写: : 或者 . (当使用 .prop 修饰符) 期望: any (带参数) | Object (不带参数) 参数: attrOrProp (可选的) 修饰符:.camel ——将短横线命名的 attribute 转变为驼峰式命名。 .prop ——强制绑定为 DOM property。…

kafka 安装

目录 Docker安装 1.安装Docker 2.搜索docker镜像 3.安装Zookeeper 4. 安装kafka 5.启动kafka ​​​​​​​ Linux安装 1.kafka下载 2.安装JDK 3.安装zookeeper 4.安装kafka 5.启动kafka zookeeper上查看kafka的节点 1.进入zookeeper容器 2.运行客户端 3.查看ka…

MongoDB --- 聚合查询

什么是聚合查询 聚合操作处理数据记录并返回计算结果。聚合操作组值来自多个文档,可以对分组数据执行各种操作以回单个结果。聚合操作包含三类:单一作用聚合、聚合管道、MapReduce(在5.x已经弃用)。 单一作用聚合 提供了对常见聚合过程的简单访问,操作都从单个集合聚合文…

网络笔记大全(超详细)

目录 OSI七层参考模型 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 封装和解封装 应用层 传输层 网络层 数据链路层 物理层 PDU --- 协议数据单元应用层 --- 报文 传输层 --- 段 网络层 --- 包 数据链路层 --- 帧 物理层 --- 比特流 Sof --- 帧首…

日本25年来首次干预以支撑日元汇率

日本周四自 1998 年以来首次干预外汇市场&#xff0c;以支撑暴跌的日元&#xff0c;此前日本央行决定维持超低利率&#xff0c;这一决定已对日元造成冲击。 KlipC 风险经理 Philip Nucci 周五表示&#xff1a;“他们&#xff08;在外汇市场&#xff09;采取了果断行动&#xff…

pytorch神经网络入门(三)

一、建立简单的卷积神经网络 import torch from torch import nnclass ConvNet(nn.Module):def __init__(self):super(ConvNet, self).__init__()self.conv1 nn.Sequential(nn.Conv2d(1, 16, 3, 1, 1),nn.ReLU(),nn.AvgPool2d(2, 2))self.conv2 nn.Sequential(nn.Conv2d(16,…

Vue学习第29天——路由的props配置项的详解与案例(对比组件props配置项)

目录一、组件的props配置项1、作用2、理解3、用法二、路由的props配置项1、作用2、理解3、用法① props值为对象② props值为布尔值③ props值为函数4、接收参数三、props配置项搭配params传参案例练习四、props配置项搭配query传参案例练习五、总结在学习路由的props配置项之前…

python机器人编程——差速机器人小车的控制,控制模型、轨迹跟踪,轨迹规划、自动泊车(中)未完待续...

目录一、前言二、轨迹的跟随控制策略&#xff08;1&#xff09;利用模型预测控制&#xff08;MPC&#xff09;的思想控制&#xff08;2&#xff09; 仿真验证一、前言 本篇我们依然试着用一些浅显的数学知识&#xff0c;来研究和实现一下常用机器人小车&#xff08;如AGV&…

异常值检测!最佳统计方法实践(代码实现)!

&#x1f4a1; 作者&#xff1a;韩信子ShowMeAI &#x1f4d8; Python3◉技能提升系列&#xff1a;https://www.showmeai.tech/tutorials/56 &#x1f4d8; 数据分析实战系列&#xff1a;https://www.showmeai.tech/tutorials/40 &#x1f4d8; 本文地址&#xff1a;https://ww…

Mysql数据库高阶语句

目录 一&#xff0c;正则表达式 1&#xff0c;以“.”代替任意一个字符 2&#xff0c;匹配前面字符多次 3&#xff0c;匹配前面字符至少一次 4,匹配字符串 5&#xff0c;匹配包含或者关系的记录 6&#xff0c;匹配指定字符集中的任意一个 二&#xff0c;运算符 1、算数运算 2…

linux在线安装JDK1.8

​​​​​创建文件路径 [rootlocalhost ~]# cd /usr/local/ [rootlocalhost local]# mkdir java [rootlocalhost local]# cd java 在线下载连接地址 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicenseaccept-securebackup-cookie" http:…