首页 > 其他分享 >将以逗号为分隔符的数字提取出来的模板

将以逗号为分隔符的数字提取出来的模板

时间:2022-10-26 20:42:13浏览次数:59  
标签:123456 sscanf 分隔符 逗号 printf 字符串 02x% buf 模板


#include <iostream>
#include <vector>
#include <string>

using namespace std;

string s;
vector<int> Input;

int main()
{
cin >> s;
for(int i = 0;i < s.size();i ++){
if(s[i] == ','){
continue;
}
string num;
while(i < s.length() && s[i] != ','){
num += s[i++];
}
i--;
int x;
sscanf(num.c_str(),"%d",&x);
Input.push_back(x);
}
for(int i = 0;i < Input.size();i ++){
printf("%d ",Input[i]);
}
return 0;
}

sscanf用法如下:

函数原型:
Int sscanf(string str,string fmt, mixed var1, mixed var2 ...);
int scanf(constchar*format [,argument]...);
说明:
sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
其中的format可以是一个或多个{%[*][width][size]type |' '|'\t'|'\n'|非%符号}
注:
1、*亦可用于格式中,(即%*d 和%*s)加了星号(*)表示跳过此数据不读入.(也就是不把此数据读入参数中)
2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、参数的size:常用的有hh表示单字节size,h表示2字节 size,其他详见man sscanf或msdn
5、type :这就很多了,就是%s,%d之类。
控制字符说明
%c 一个单一的字符
%d 一个十进制整数
%i 一个整数
%e,%f,%g 一个浮点数
%o 一个八进制数
%s 一个字符串
%x 一个十六进制数
%p 一个指针
%n 一个等于读取字符数量的整数
%u 一个无符号整数
%[]一个字符集 区别于前面可有可无的[]部分
%%一个精度符


6、特别的:%*[width][{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:

%[a-z]表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)

%[aB'] 匹配a、B、'中一员,贪婪性

%[^a]匹配非a的任意字符,贪婪性

还是用例子说话:


#include<stdio.h>
int main()
{
char buf[512]={0};
//1. 常见用法。
sscanf("123456 asdf","%s", buf);
printf("%s\n", buf);
printf("123456 Expect! %%s\n\n");
//结果为:123456
//2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ","%4s", buf);
printf("%s\n", buf);
printf("1234 Expect! %%4s\n\n");
//结果为:1234
//3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf","%[^ ]", buf);
printf("%s\n", buf);
printf("123456 Expect! %%[^ ]\n\n");
//结果为:123456
//4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEFxyz","%[1-9a-z]", buf);
printf("%s\n", buf);
printf("123456abcdedf Expect! %%[1-9a-z]\n\n");
//结果为:123456abcdedf
//5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456 abcdedfBCDEFxyz","%[^A-Z]", buf);
printf("%s\n", buf);
printf("123456 abcdedf Expect! %%[^A-Z]\n\n");
//结果为:123456 abcdedf
//6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122","%*[^/]/%[^@]", buf);1.星号为了忽略非/之前的 2.多加一个/将其过滤
printf("%s\n", buf);
printf("12DDWDFF Expect! %%*[^/]/%%[^@]\n\n");
//结果为:12DDWDFF
//7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
sscanf("hello, world","%*s%s", buf);
printf("%s\n", buf);
printf("world Expect! %%*s%%s\n\n");
//结果为:world 没有逗号
//8、参数size的控制
unsignedchar m[6]={0};
int n =0;
// sscanf 返回输入了几个参数
n = sscanf("010203040506","%hhx%hhx%hhx%hhx%hhx%hhx",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5]);
printf("hhx: %d :%02x%02x%02x%02x%02x%02x\n",n, m[0], m[1],m[2],m[3], m[4], m[5]);
// 结果 n 为 1, 因为 hhx 把所有字符串作为一个数字,后面的都没有输入
n = sscanf("010203040506","%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5]);
printf("2hhx: %d :%02x%02x%02x%02x%02x%02x\n",n, m[0], m[1],m[2],m[3], m[4], m[5]);
// 结果 n 为 6, 加了2,之后限制每次hhx只匹配2个字符,所以每个都被输入
n = sscanf("010203040506","%02x%02x%02x%02x%02x%02x",&m[0],&m[1],&m[2],&m[3],&m[4],&m[5]);
printf(" 02x: %d :%02x%02x%02x%02x%02x%02x\n",n, m[0], m[1],m[2],m[3], m[4], m[5]);
// 0 是填充字符,2表示匹配2个字符,x表示一个十六进制数
// 注意:编译有warning,有时结果是正确的(跟具体的编译器、编译选项、编译环境有关),但x表示4个字节,大于被输入对象的大小
// 这会导致相邻的3个字节会被覆盖!!这会导致分配在相邻内存的变量被清0

return0;
}

 

标签:123456,sscanf,分隔符,逗号,printf,字符串,02x%,buf,模板
From: https://blog.51cto.com/u_13121994/5798363

相关文章

  • 字符串--字符串替换模板
    请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字......
  • 行为型模式-模板方法模式
    行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,他涉及算法与对象间职责的分配。行为型模式分为......
  • pycharm设置文件模板
      模板样例:#!/usr/bin/python#-*-coding:UTF-8-*-"""@author:${USER}@Description:描述@file:${NAME}.py@time:${YEAR}/${MONTH}/${DAY}"""if__na......
  • 企业级自定义表单引擎解决方案(十四)--表单模板2
    .netcore研发的自定义表单引擎,采用强大的规则引擎将所有的业务串联起来的,和其他低代码平台是有本质的区别的,目标是完全解放繁琐的CRUD工作。常规的业务,在需求以及数据库......
  • Gitea 1.18 功能前瞻(其二):文件树导航、基于 YAML 格式创建的工单模板、在多种语言的 RE
    Gitea1.18的发布日期临近了,这里收集并展示了一些新版本中的前端界面新特性。1.我们在代码评审页面的侧边栏引入了树形结构的文件导模块当你打开合并请求-文件变动......
  • vue3模板编译
    @keyup.entervue<[email protected]>HelloWorld</div>jsimport{withKeysas_withKeys,openBlockas_openBlock,createElementBlockas_createElementBlock......
  • 初识设计模式 - 模板方法模式
    简介在模板方法设计模式(TemplateMethodDesignPattern)中比较重要的两个概念是基本方法和模板方法。实现具体逻辑步骤的方法可以称之为基本方法,而把基本方法汇总起来......
  • django 模板和静态文件
    模板注意html页面会去app目录下寻找templates目录寻找页面(根据app的注册顺序,逐一去他们的templates查找)settings中TEMPLATES中DIRS是"DIRS":[BASE_D......
  • 使用PdfSharp从模板生成Pdf文件
    ​最近在做一个生成文档的需求。通过先制作一个包含各字段占位符的文档模板,导入这个模板并填写内容替换掉占位符,再输出成最终文件。由于版式固定,安全性更好,业务上常用Pdf......
  • 下载模板,从前端到后端
    前端Vue:vartempType="application/msexcel";   this.SearchForm.Type="2";   this.tableHeader.forEach((element)=>{    this.SearchForm.se......