C_C++文件,字符串和控制台格式化处理总结

news2024/11/24 10:29:04

       在实际业务开发中经常会用到文件,字符串和控制台格式化操作,格式化操作无非就是将数据转成指定格式存储在文件或者字符串,或者显示在控制台上,或者反过来。本篇结合实际工作将C/C++语言中常用的文件,字符串和控制台常用格式化方法进行整理和介绍。

目录

1. 控制台格式化

1.1 输入格式化

1.1.1 C语言常用函数

1.1.2  C++常用函数

1.2 输出格式化

1.2.1 C语言常用函数

1.2.2 C++常用函数

2. 字符格式化

2.1 输入格式化

2.1.1 C语言常用函数

2.1.2 C++常用函数

2.2 输出格式化

2.2.1 C语言常用函数

2.2.2 C++常用函数

3. 文件格式化

3.1 输入格式化

3.1.1 C语言常用函数

3.1.2 C++常用函数

3.2 输出格式化

3.2.1 C语言常用函数

3.2.2 C++常用函数

4. 调用举例

4.1 C语言调用 

4.2 C++调用


1. 控制台格式化

1.1 输入格式化

1.1.1 C语言常用函数

scanf

1.1.2  C++常用函数

cin

1.2 输出格式化

1.2.1 C语言常用函数

printf

1.2.2 C++常用函数

cout

2. 字符格式化

2.1 输入格式化

2.1.1 C语言常用函数

sscanf

2.1.2 C++常用函数

stringstream / istringstream

2.2 输出格式化

2.2.1 C语言常用函数

sprintf

2.2.2 C++常用函数

stringstream / ostringstream

3. 文件格式化

3.1 输入格式化

3.1.1 C语言常用函数

fscanf

3.1.2 C++常用函数

fstream / ifstream

3.2 输出格式化

3.2.1 C语言常用函数

fprintf

3.2.2 C++常用函数

fstream / ofstream

4. 调用举例

如下分别使用C和C++来实现对文件,字符串和控制台的格式化输入输出,用两种语言实现同样的功能以做对比

(1)对于文件:先格式化输出内容到文件,在从文件格式化输入到内存中各个对应变量中,其中会过滤到特殊字符,只提取关心的数据

(2)对于字符串:会从字符串中格式化提取到对应变量,然后再格式化输出到字符串中

(3)对于控制台:就是最常用的接收接盘输入,然后在输出

4.1 C语言调用 

#include <stdio.h>
#include <stdlib.h>

int main() {
    //================ C语言文件输入输出格式化 ===================
    char str1[128] = {0}, str2[128] = {0}, str3[128] = {0}, str4[128] = {0};
    int num1 = 0, num2 = 0, num3 = 0;
    FILE *fp = fopen("test.txt", "w+");
    fputs("2022 11 30 rewrw     57567\n\r", fp);
    //格式化输出
    fprintf(fp, "%d + %d = %d\n", 1, 2, 3);
    fprintf(fp, "%s   +    %s   =   %s\n", "abc", "def", "abcdef");

    rewind(fp);
    fscanf(fp, "%s %s %s %s %d", str1, str2, str3, str4, &num1);
    printf("[%s] [%s] [%s] [%s] [%d]\n", str1, str2, str3, str4, num1);

    //fscanf(fp, "%*[\n]%*[\r]%[^ ] %*[+] %[^ ] %*[=] %[0-9]", str1, str2, str3);
    // %*[\n\r]:表示过滤\r\n  %*[+]:过滤+  %*[=]:过滤=
    fscanf(fp, "%*[\r\n]%[0-9] %*[+] %[0-9] %*[=] %[0-9]", str1, str2, str3);
    printf("[%s] [%s] [%s]\n", str1, str2, str3);

    fscanf(fp, "%*[\n]%s %*[+] %s %*[=] %s", str1, str2, str3);
    printf("[%s] [%s] [%s]\n\n", str1, str2, str3);
    fclose(fp);
    
    //============ C语言字符串输入输出格式化 =================
    char* strIp = "192.168--10.10";
    int first = 0, second = 0, third = 0, fouth = 0;
    //注意其中的空格
    sscanf(strIp, "%d.%d-     %d.%d", &first, &second, &third, &fouth);
    printf("[%d] [%d] [%d] [%d]\n", first, second, third, fouth);

    char *strTime = "2022-11-30_19:46:37_345";
    int year = 0, month = 0, day = 0, hour = 0, minute = 0, seconds = 0, mseconds = 0;
    //数值输入
    sscanf(strTime, "%d-%d-%d_%d:%d:%d_%d", 
    &year, &month, &day, &hour, &minute, &seconds, &mseconds);
    printf("%d %d %d %d %d %d %d\n", year, month, day, hour, minute, seconds, mseconds);
    char buf1[128] = {0}, buf2[32] = {0}, buf3[32] = {0}, buf4[32] = {0}, buf5[32] = {0}, buf6[32] = {0}, buf7[32] = {0};
    //字符串输入
    sscanf(strTime, "%[^-]-%[^-]-%[^_]_%[^:]:%[^:]:%[^_]_%s", buf1, buf2, buf3, buf4, buf5, buf6, buf7);
    printf("%s %s %s %s %s %s %s\n", buf1, buf2, buf3, buf4, buf5, buf6, buf7);

    char *strHttpReq = "GET      /index.htm     HTTP/1.1";
    sscanf(strHttpReq, "%s %s %s", buf1, buf2, buf3);
    printf("%s-%s-%s\n", buf1, buf2, buf3);
    
    sprintf(buf1, "%s, %s, %s, today is %d-%d-%s\n\n", 
            "andy", "hello", "很高兴认识你", 2022, 11, "30");
    printf(buf1);

    //================ C语言控制台格式化输入输出 =================
    scanf("%s %d %s", buf1, &num1, buf2);
    printf("%s-%d-%s\n", buf1, num1, buf2);

    return 0;
}

运行结果如下:

4.2 C++调用

#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip> //setw  setfill

using namespace std;

int main() {
     //================ C++文件输入输出格式化 ===================
    std::string str1, str2, str3, str4, str5;
    int num1 = 0, num2 = 0, num3 = 0, num4 = 0;
    std::fstream fStream("test.txt", std::ios::out | std::ios::in);
    if (fStream) {
        //输出操作
        fStream << 2022 << " " << 11 << " " << 30 << " rewrw     57567" << std::endl;
        fStream << 1 << " + " << 2 << " = " << 3 << std::endl;
        fStream << "abc" << "   " << "def" << "   " << "abcdef" << std::endl;
        //输入操作
        fStream.seekg(0, ios::beg);
        fStream >> str1 >> str2 >> str3 >> str4 >> num1;
        std::cout << str1 << "-" << str2 << "-" << str3 << "-" << str4 << "-" << num1 << std::endl;
        
        fStream.seekg(0, ios::beg);
        fStream >> num1 >> num2 >> num3 >> str1 >> num4;
        std::cout << num1 << "-" << num2 << "-" << num3 << "-" << str1 << "-" << num4 << std::endl;
        
        fStream >> str1 >> str2 >> str3 >> str4 >> str5;
        std::cout << str1 << "|"<< str2 << "|" << str3 << "|" << str4
            << "|" << str5 << std::endl;
        
        fStream >> str1 >> str2 >> str3;
        std::cout << str1 << "|"<< str2 << "|" << str3 << std::endl << std::endl;

        fStream.close();
    }

    
    //============ C++字符串输入输出格式化 =================
    std::string strIp = "192.168--10.10";
    int first = 0, second = 0, third = 0, fouth = 0;
    std::stringstream ss(strIp);
    //提取IP地址
    ss >> first >> setw(1) >> str1 >> second >> setw(1) >> str2 >> third >> setw(1) >> str3 >> fouth;
    std::cout << first << "." << second << "." << third << "." << fouth<< std::endl;

    //提取时间
    ss.clear();
    std::string strTime = "2022-11-30_19:46:37_345";
    ss.str(strTime);
    int year = 0, month = 0, day = 0, hour = 0, minute = 0, seconds = 0, mseconds = 0;
    ss >> year >> setw(1) >> str1 >> month >> setw(1) >> str1 >> day >> setw(1) >> str1 >>
         hour >> setw(1) >> str1 >> minute >> setw(1) >> str1 >> seconds >> setw(1) >> str1 >> mseconds;
    std::cout << year << '-' << month << '-' << day << '_' << hour << 
    ':' << minute << ':' << seconds << '_'<< mseconds << std::endl;

    ss.clear();
    ss.str("GET      /index.htm     HTTP/1.1");
    ss >> str1 >> str2 >> str3;
    std::cout << str1 << "|" << str2 << "|" << str3 << std::endl;

    ss.clear();
    ss.str("");
    ss << "andy, " << "hello, " << "很高兴认识你, today is " << 2022 << 11 << "30";
    std::cout << ss.str() << std::endl;

    //拆分字符串
    ss.clear();
    ss.str("123|456|789|101111|131415|161718|192021");
    std::string item;
    //std::getline第一个参数是输入流 cin istringstream ifstream参数均可以
    while (std::getline(ss, item, '|')) {
        std::cout << item << " ";
    }
    std::cout << std::endl << std::endl;


    //================ C++控制台格式化输入输出 =================
    std::cin >> str1 >> num1 >> str2;
    std::cout << str1 << "=" << num1 << "=" << str2 << std::endl;
    //从键盘获取一行文本,遇到\n结束,文本之间可以有空格
    std::getline(std::cin, str1);
    std::cout << str1 << std::endl;
    //遇到空格就结束取值,空格(包括)的输入不会存储在str1中
    //std::getline(std::cin, str1, ' ');
    
    return 0;
}

运行结果如下:

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

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

相关文章

[附源码]Python计算机毕业设计Django高血压分析平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

数据抓取-bs4、XPath、pyquery详细代码演示

数据抓取-bs4、XPath、pyquery 一般抓取某个网站或者某个应用的内容&#xff0c;内容分为两个部分 非结构化的文本&#xff1a;HTML文本 结构化的文本&#xff1a;JSON、XML 非结构化的数据常见的解析方式有&#xff1a;XPath、CSS选择器、正则表达式 XPath语言 XPath是X…

golang知识点整理

目录 1、goroutine GMP模型 2、goroutine阻塞的处理 3、goroutine内存泄漏 4、map原理、扩容 5、go内存管理 6、go的gc 1、goroutine GMP模型 1. G代表一个goroutine对象&#xff0c;每次go调用的时候&#xff0c;都会创建一个G对象 2. M代表一个线程&#xff0c;每次创建…

JavaScript和Node.js的关系

JavaScript和Node.js的关系 JavaScript是一门编程语言&#xff08;脚本语言&#xff09;&#xff0c;JavaScript以前是在浏览器里执行的&#xff0c;需要浏览器里的JavaScript引擎&#xff0c;Firefox有叫做Spidermonkey的引擎&#xff0c;Safari有JavaScriptCore的引擎&#x…

第2章物理层——2.数据通信基础知识

一.数据通信系统模型 一个通信系统可以划分为三大部分: 源系统&#xff08;发送端&#xff09;&#xff0c;传输系统&#xff08;传输网络&#xff09;&#xff0c;目的系统&#xff08;接收端&#xff09; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传…

GIS工具maptalks开发手册(二)03-02——示例之json格式添加绘制工具、渲染点、文字和多个面

GIS工具maptalks开发手册(二)03-02——示例之json格式添加绘制工具、渲染点、文字和多个面 layer参数——https://maptalks.org/maptalks.js/api/0.x/Layer.html 1、json格式渲染点和面 效果-json格式渲染点和面 代码 index.html <!DOCTYPE html> <html> <…

spring boot使用自定义过滤器实现接口认证

spring boot使用自定义过滤器实现接口认证自定义过滤器创建FilterConfig类加密 解密 验证CipherFilter其他工具类AES 128 加密工具bean未加载前获取bean接口效果swagger访问Apipost 错误请求Apipost 正确请求自定义过滤器 创建MyFilter 类 去实现Filter接口 根据业务逻辑&…

(Git) git使用入门学习

文章目录打开基本操作拉代码常用指令设置用户查看历史版本分支管理配置公钥基于VS CodeEND打开 Git Bash Here 即打开命令行的形式 基本操作 拉代码 # git clone 地址 $ git clone https://gitee.com/heaven-sent-lotus/test.git常用指令 # 查看状态 git status# 添加到工作区…

数学建模学习(109):几行代码训练几十种机器学习模型

由于本专栏不是专门讲解机器学习的,因此我想该专栏的读者在机器学习模型的实践和理论上是比较薄弱的。 我想大家在经历过数学建模比赛,一定发现机器学习的模型是一定会出现的。无论是哪一场数学建模比赛,一定有一个题是用机器学习的。虽然前面的文章中,讲解了几篇机器学习…

JS实现二叉排搜索树

二叉树中的节点最多只能有两个子节点&#xff1a;一个是左侧子节点&#xff0c;另一个是右侧子节点。而二叉搜索树又可以简称BST&#xff0c;它是二叉树的一种&#xff0c;但是只允许你在左侧节点存储&#xff08;比父节点&#xff09;小的值&#xff0c;在右侧节点存储&#x…

FX粒子(Niagara系统)、顶点法线材质函数、材质参数集——雪和简单地形材质积雪效果

雪 一、利用FX——Niagara系统创建粒子&#xff0c;模板选择 喷泉粒子模板 二、删除不需要的模块 球体位置发射、初始的向上速度、拖拽等和雪无关的模块删除。 三、添加需要的模块并设置 需要大范围降雪故用box location&#xff08;5000,5000,2000&#xff09;&#xff0c;…

Pycharm中使用远程JupyterLab以及JupyterHub登录问题

文章目录需求分析登录网页JupyterHubPycharm配置远程JupyterHub一点思考需求分析 在之前的文章中我们讨论了如何使用Pycharm连接远程服务器并进行调试&#xff0c;Pycharm中SSH、SFTP连接远程服务器编辑调试全面手把手教程&#xff0c;成功在Pycharm中添加了远程Python解释器&…

docker 实战命令集合

目录 docker 基本命令 查看docker的信息 查看docker的版本 docker镜像管理命令 查找镜像 拉取镜像 查看本地仓库的镜像 查看镜像的详细信息 删除本地仓库的镜像 将镜像文件打包 读取打包过后的镜像文件 登入docker hub 推送镜像到dockerHub docker容器管理命令 创…

Keras深度学习入门篇

Keras深度学习入门篇 第一部分&#xff1a;机器学习基础 一、机器学习的四个分支 监督学习 分类回归序列生成&#xff0c;给定一张图像&#xff0c;预测描述图像的文字语法树预测&#xff0c;给定一个句子&#xff0c;预测其分解生成的语法树目标检测&#xff0c;给定一张图…

CTFShow re3

先查一下&#xff0c;没包&#xff0c;64位 IDA看伪代码 再看循环 可以测出i5时v16为e560 而想让v160xffff&#xff0c;只需要ffff-e560就能得到v17[6] 1a9f 所以flag就是1a9f&#xff01;&#xff01; 等下为什么啊我没懂啊 回到前面 v19既没有赋值也没有输入&#xff0…

使用 Qt for Android 获取并利用手机传感器数据(1)开发环境省心搭建

现代手机拥有许多传感器&#xff0c;包括地磁、姿态、GPS、光照、温度、气压、摄像、声音、电磁等&#xff0c;完全就是一个高度集成的科学仪器。不夸张的说&#xff0c;一部手机加上一个外围的计算机和控制系统&#xff0c;做一个功能较强的自主移动机器人并不是不可能。但是&…

【wpf】 当用了数据模板之后如何获取控件的Item?

背景 我对一个treeview使用了数据模板 <TreeView.ItemTemplate> <!--子项的绑定--><HierarchicalDataTemplate DataType"{x:Type local_md:ToolsNodeItem}" ItemsSource"{Binding PathChildren}"><StackPanel Orie…

史上最全的Python包管理工具:Anaconda教程

事实上Anaconda 和 Jupyter notebook已成为数据分析的标准环境。 简单来说&#xff0c;Anaconda是包管理器和环境管理器&#xff0c;Jupyter notebook 可以将数据分析的代码、图像和文档全部组合到一个web文档中。 接下来我详细介绍下Anaconda&#xff0c;并在最后给出Jupyte…

[oeasy]python0022_框架标题的制作_banner_结尾字符串_end

结尾字符串(end) 回忆上次内容 ​python3​​ 的程序是一个 5.3M 的可执行文件 ​​python3​​ 里面存的是 cpu 指令可以执行的那种我们可以把指令对应的汇编找到 ​​objdump -d ~/python3 > python3.asm​​ 汇编语句是和当前机器架构的指令集相关的 ​​uname -a​​可…

【文件I/O】标准IO:库函数

标准IO&#xff1a;库函数一、基本概念1.文件类型2.标准I/O介绍3.流的概念4.文本流和二进制流5.流的缓冲类型6.标准I/O流&#xff08;stdin、stdout、stderr&#xff09;二、标准I/O函数1.fopen、fclose、errrno、strerror、perror&#xff08;打开、关闭文件&#xff0c;输出错…