从字符串中读写的方法:c语言中的sscanf、sprintf函数,c++中的I/O流strstream、stringstream

news2024/12/1 0:40:35

一、sscanf、sprintf函数

众所周知,c语言中我们常使用的标准输入输出流函数为scanf()、printf(),默认从键盘上输入数据、向屏幕输出数据。此外,c语言中还提供了另一组库函数sscanf()、sprintf()函数,它们的功能与前者相同,只不过输入输出的对象为字符串。
这两个函数的原型为

#include <stdio.h>
int sscanf(const char *buffer, const char *format[, argument]...);
int sprintf(char *buffer, const char *format[, argument]...);

除了第一个参数外,其他参数的含义和用法实际上是与scanf()、printf()相同的。下面给举个例子。

#include <stdio.h>

struct student {
	char name[20];
	int age;
	float score;
};

int main()
{
	// 使用sscanf()函数从字符串中获取输入
	char in_arr[50] = "Zhangsan 20 90.5";
	struct student stu;
	sscanf(in_arr, "%s %d %f", stu.name, &stu.age, &stu.score);
	printf("%s, %d, %f\n", stu.name, stu.age, stu.score);

	// 使用sprintf()函数向字符串中输出
	char out_arr[50];
	stu.age = 25;
	stu.score = 85.0;
	sprintf(out_arr, "%s %d %f", stu.name, stu.age, stu.score);
	printf("%s", out_arr);
	return 0;
}

运行结果为
在这里插入图片描述

二、c++中的istringstream、ostreamstring、stringstream

c++中的stringstream派生自iostream,将输入输出流定向至string对象中,已完成和sscanf/sprintf相似的效果。
需要包括头文件#include <sstream>
istringstream的作用是从string对象中读取,由istream中派生,构造函数原型

istringstream::istringstream(string str);

常用成员函数

str():使istringstream返回一个string字符串

ostringstream的作用是从string对象中读取,由ostream中派生,构造函数原型

ostringstream::ostringstream();
ostringstream::ostringstream(string str);	使用一个string初始化ostringstream,

常用成员函数

str():使ostringstream返回一个string字符串

stringstream的作用就是istringstream + ostringstream。
举个例子。

#include <iostream>
#include <sstream>
using namespace std;

struct student {
	char name[20];
	int age;
	float score;
};

int main()
{
	// 使用istringstream从字符串中获取输入
	string in_str = "Zhangsan 20 90.5";
	struct student stu;
	istringstream strin(in_str);
	strin >> stu.name >> stu.age >> stu.score;
	cout << stu.name << ", " << stu.age << ", " << stu.score << endl;

	// 使用ostringstream向字符串中输出
	stu.age = 25;
	stu.score = 85.0;
	ostringstream strout; //建立输出字符串流,与数组out_arr建立关系,缓冲区长度为50
	strout << stu.name << " " << stu.age << " " << stu.score;
	cout << strout.str();
	return 0;
}

运行结果为
在这里插入图片描述

三、c++中的istrstream、ostrstring、strstream

strstream的作用是与stringstream相同,不同的是strstream读写的是char *字符串,stringstream读写的是string类。
istrstream的构造函数原型为

istrstream::istrstream(char *buffer);
istrstream::istrstream(char *buffer, int n);

ostrstream的构造函数原型为

ostrstream::ostrstream(char *buffer, int n, int mode=ios::out);

strstream的构造函数原型为

strstream::strstream(char *buffer, int n, int mode);

举个例子。

#include <iostream>
#include <strstream>
using namespace std;

struct student {
	char name[20];
	int age;
	float score;
};

int main()
{
	// 使用istrstream从字符串中获取输入
	char in_arr[50] = "Zhangsan 20 90.5";
	struct student stu;
	istrstream strin(in_arr);
	strin >> stu.name >> stu.age >> stu.score;
	cout << stu.name << ", " << stu.age << ", " << stu.score << endl;

	// 使用ostrstream向字符串中输出
	char out_arr[50];
	stu.age = 25;
	stu.score = 85.0;
	ostrstream strout(out_arr, sizeof(out_arr)); //建立输出字符串流,与数组out_arr建立关系,缓冲区长度为50
	strout << stu.name << " " << stu.age << " " << stu.score;
	strout << ends; //ends是C++的I/O操作符,ostrstream不会自动补'\0',因此要手动添加'\0'
	cout << out_arr;
	return 0;
}

运行结果
在这里插入图片描述

注意:ostringstream下有一个构造函数ostringstream(string str),ostrstream的构造函数是ostrstream(char *buffer, int n),两者看起来很类似,第一个参数都是输出的string类/字符数组对象,但用法其实完全不同。
ostringstream(string str)中参数str的作用是初始化ostringstream类,例如代码

string str = "abcd";
ostringstream strout(str);
cout << strout.str();

则直接输出"abcd",这意味着str是向strout流中填充初始化数据的。
但ostrstream的用法为

char arr[10];
ostrstream strout(arr, sizeof(arr));
strout << "abcd" << ends;
cout << arr;

结果也是输出"abcd",但strout时是将其与字符数组arr绑定在一起,输出流是输出进arr中。

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

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

相关文章

spark复习重点

什么是大数据 大数据是指数据量巨大、类型繁多、处理速度快的数据集合。它不仅包括传统的结构化数据&#xff0c;还包括非结构化数据、半结构化数据等多种形式的数据。大数据的处理需要使用特殊的技术和工具&#xff0c;如分布式存储、分布式计算、数据挖掘、机器学习等。 大…

软考A计划-系统架构师-官方考试指定教程-(7/15)

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

uniapp主题切换功能的第二种实现方式(scss变量+require)

在上一篇 “uniapp主题切换功能的第一种实现方式&#xff08;scss变量vuex&#xff09;” 中介绍了第一种如何切换主题&#xff0c;但我们总结出一些不好的地方&#xff0c;例如扩展性不强&#xff0c;维护起来也困难等等&#xff0c;那么接下我再给大家介绍另外一种切换主题的…

聊聊那些奇葩的代码规范 —— 滥用静态导入

因为有些要求感觉实是太过奇葩&#xff0c;收集下来娱乐下大家。 代码规范要求 要求如果代码可以静态导入的话&#xff0c;就必须要静态导入。 所有的代码如果不静态导入&#xff0c;就直接 PR 拒绝合并。 举例&#xff1a;equalsAnyIgnoreCase("test","tes…

总结894

学习目标&#xff1a; 月目标&#xff1a;6月&#xff08;线性代数强化9讲遍&#xff0c;背诵15篇短文&#xff0c;考研核心词过三遍&#xff09; 周目标&#xff1a;线性代数强化3讲&#xff0c;英语背3篇文章并回诵&#xff0c;检测 每日必复习&#xff08;5分钟&#xff0…

chatgpt赋能python:Python怎么Import自己写的SEO文章

Python怎么Import自己写的SEO文章 如果你是一位Python开发人员&#xff0c;并且正在为SEO优化而努力编写文章&#xff0c;那么你可能会想知道如何将自己编写的SEO文章导入您的程序中以便更好的利用。 在这篇文章中&#xff0c;我们将介绍如何使用Python中的import语句将自己编…

UNIX网络编程卷一 学习笔记 第十九章 密钥管理套接字

随着IP安全体系结构&#xff08;IPsec&#xff09;的引入&#xff0c;密钥加密和认证密钥的管理越来越需要一套标准机制。RFC 2367介绍了一个通用密钥管理API&#xff0c;可用于IPsec和其他网络安全服务&#xff0c;该API创建了一个新协议族&#xff0c;即PF_KEY域&#xff0c;…

chatgpt赋能python:Python一行输入三个数:方便快捷,还能提高效率!

Python一行输入三个数&#xff1a;方便快捷&#xff0c;还能提高效率&#xff01; Python是一门非常流行的编程语言&#xff0c;不仅仅因为它简单易用&#xff0c;更因为它拥有丰富的生态系统和强大的库支持。但是&#xff0c;Python的输入方式却是许多人常常感到头疼的部分。…

学会使用“条件断点“来解放你的鼠标

&#xff08;PS&#xff1a;对调试较为熟悉却没有使用过条件断点的同学可以直接翻到文章底部看操作的GIF图~&#xff09; 一、背景 "Debug"想必大家在开发的过程中也是有经常使用的&#xff0c;这里简单的介绍一下浏览器"Debug"其中的两种方式。&#xff…

使用idea创建java web项目

创建web项目有很多方法&#xff0c;就说一个最简单的方法吧。 创建一个java项目&#xff0c;点击创建右击项目选择添加框架支持。勾选上web应用程序&#xff0c;点击确定。 再点击当前文件&#xff0c;编辑配置 点击加号&#xff0c;选择Tomcat服务器&#xff08;本地&#xf…

【连续介质力学】变形梯度

变形梯度 简介 本节讨论两个不同质点P和Q的之间的相对运动变化 拉伸比和相对伸长 d X ⃗ d\vec X dX : 在参考构形连接质点P和Q的向量&#xff0c;线单元 M ^ \hat M M^: d X ⃗ d\vec X dX 方向的单位向量 d x ⃗ d\vec x dx : 在当前构形连接质点P’和Q‘的向量&#xff…

对象存储分布式代理-go初学者的开源练手项目

最近写了一个go语言练手项目osproxy和osproxy-grpc&#xff0c;代码已完全开源到github。 相信不少接触go语言的读者&#xff0c;都是被它"极简协程"&#xff0c;“高并发”&#xff0c;"高性能"的特性所吸引&#xff0c;我也不例外&#xff0c;想着学完之…

基于MATLAB涡度通量数据处理技术应用

点击查看原文 本文基于MATLAB语言、以实践案例为主&#xff0c;提供代码、原理与操作结合 1、以涡度通量塔的高频观测数据为例&#xff1a;基于MATLAB开展上机操作 2、涡度通量观测基本概况&#xff1a;观测技术方法、数据获取与预处理等 3、涡度通量数据质量控制&#xff1…

第3章 需求分析(上)

第3章 需求分析&#xff08;上&#xff09; 3.1 需求分析任务 3.1.1 确定对系统的综合要求 1. 功能需求 通过需求分析应该划分出必须完成的所有功能。 2. 性能需求 性能需求指定系统必须满足的定时约束或容量约束 3. 可靠性和可用性需求 可靠性需求定量地指定系统的可靠…

二叉树的最近公共祖先LCA

一、什么是最近公共祖先 LCA为最近公共祖先&#xff08;Lowest Common Ancestor&#xff09;的缩写。 对于一棵有根树T的两个节点u,v,最近公共祖先LCA(T,u,v)代表一个节点x。 LCA(5,6) 2 LCA(7,12) 3 LCA(2,1)1 二、公共祖先的朴素解法 两个节点先调整到相同的深度每一次…

Qt6使用cmake创建项目

目录 创建普通项目 创建qt项目 创建具有资源文件的qt项目 在QT6中&#xff0c;官方推荐在新的项目中使用CMake。 在Qt Creator中使用CMake构建系统时&#xff0c;与往常的qmake有一些不一样&#xff0c;因此写一篇文章来记录一下。 创建普通项目 我们先写一个最简单的项目…

chatgpt赋能python:Python的Unicode编码介绍

Python的Unicode编码介绍 什么是Unicode Unicode是一个字符集&#xff0c;它定义了世界上几乎所有的字符&#xff0c;包括字母、数字、符号和标点。Unicode使用唯一的数字编码来表示每个字符&#xff0c;这使得在不同的操作系统和编程语言中展示和处理字符非常方便。在Python…

chatgpt赋能python:Python怎样完成更新?

Python怎样完成更新&#xff1f; Python是一种非常流行的编程语言&#xff0c;由于它的简单易学和广泛的应用领域&#xff0c;许多程序员选择使用Python编写程序。但是&#xff0c;随着时间的推移和技术的不停发展&#xff0c;Python需要不断更新以保持全球开发者的使用体验。…

ES 如何重建索引

场景&#xff1a; ES索引中&#xff0c;为了效率和存储空间&#xff0c;有些字段可以设定为不被索引&#xff0c;然后某一天又需要改成能索引&#xff0c;此时就需要对ES进行重建索引&#xff0c;操作如下 1、修改 ES 索引模板文件 cd /data/elk/logstash/es-template/ vim e…

JavaSE笔记(七)

Java反射和注解 **注意&#xff1a;**本章节涉及到JVM相关底层原理&#xff0c;难度会有一些大。 反射就是把Java类中的各个成分映射成一个个的Java对象。即在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类所有的属性和方法&#xff0c;对于任意一个对象…