首页 > 其他分享 >本周收获

本周收获

时间:2023-04-09 23:23:34浏览次数:40  
标签:sscanf int double 收获 本周 str printf 字符串

[正则表达式]

1.ssacnf函数 

   一、描述

sscanf通常被用来解析并转换字符串,其格式定义灵活多变,可以实现很强大的字符串解析功能。

sscanf的原型

#include <stdio.h>
int sscanf(const char *str, const char *format, ...);

str:待解析的字符串;

format:字符串格式描述;

其后是一序列数目不定的指针参数,存储解析后的数据(与scanf函数后面类似).。

二、示例用法
1. sscanf的基本用法
整形数转换

int year, month, day;
 
int converted = sscanf("20191103", "%04d%02d%02d", &year, &month, &day);
printf("converted=%d, year=%d, month=%d, day=%d/n", converted, year, month, day);

输出结果:

converted=3, year=2019, month=11, day=03

"%04d%02d%02d"是用来解析字符串的格式,%表示格式转换的开始,d表示转换为一个整数,04作为d的修饰,表示这是一个长度为4位的整数,不足4位时以0补齐。

例子返回结果等于3,表示有3个数据成功转换,转换成功数目同时取决于被解析的字符串以及其转换格式,如果我们把例子中的格式改为"%04d%02d",那么sscanf将只返回2,day的数值不会被sscanf更改。

浮点数转换

double longitude, latitude;
int converted = sscanf("113.123456789 31.123456789", "%lf %lf", &longitude, &latitude);
printf("converted=%d, longitude=%.9lf, latitude=%lf/n", converted, longitude, latitude);

输出结果:

converted=2, longitude=113.123456789, latitude=31.123457

sscanf的格式字符串中,f表示这是一个浮点数,其修饰词l表示这是一个double的浮点数。

2. sscanf的高级用法
数字+字符串

char str[32] = "";
sscanf("123456abcdedf", "%31[0-9]", str);
printf("str=%s/n", str);

输出结果:

str=123456

上面的格式中,[0-9]表示这是一个仅包含0-9这几个字符的字符串,前面使用数字31修饰词表示这个字符串缓冲区的最大长度(这也是sscanf最为人诟病的地方,很容易出现缓冲区溢出错误,实际上sscanf是可以避免出现缓冲区溢出的,只要在书写任何字符串解析的格式时,注意加上其缓冲区尺寸的限制)。

char str[32] = "";
sscanf("123456abcdedf", "%31[0-9a-z]", str);
printf("str=%s/n", str);

输出结果:

str=123456abcdedf

在格式[]中增加了a-z的描述。

使用^示例:

char str[32] = "";
sscanf("123456abcdedf", "%31[^a-z]", str);
printf("str=%s/n", str);

输出结果:

str=123456

在[]中增加表示相反的意思,上面的[a-z]表示一个不包含任何a-z之间的字符串。

使用*的例子:

char str[32] = "";
int ret = sscanf("123456abcdedf", "%*[0-9]%31[a-z]", str);
printf("ret=%d, str=%s/n",ret, str);

输出结果:

ret=1, str=abcdedf

加上*修饰表示一个被忽略的数据,同时也不需要为它准备空间存放解析结果。如上面的例子中,我们就只使用了str一个参数存放%31[a-z]的解析结果,而sscanf也只返回1,表示只解析了一个数据。

2.sprintf()函数

sprintf函数调用的主要用途就是把一个字符串放在一个已知的字符数组里去。其实这是一个很常用的库函数,在解决某些OJ题的时候会经常用到它来帮助实现字符串的转移和储存。这里我就在简单的介绍一下其用法。

int sprintf(char *string, char *format [,argument,...]);

第一个参数:(buffer)
这个参数就是接收字符串的字符数组。其大小必须要大于所接收的字符串的大小,否则的话会有空间不够从而导致内存溢出的风险。(这里比较大小时还要考虑到字符串最后的 ‘\0’)

第二个参数:(format)
这个参数就是要传的字符串了。

其余参数:
剩下的参数其实算是对第二个参数format的补充,可有可无,视情况而定。

 

 

有多个参数:

 

 

这里的字符ch和整数num都可以对字符串进行补充,当然也可以是字符串等等...

第一个参数的注意事项:
除了上文提到的比较第一个参数和第二个参数的大小问题,还要注意当你想要在一个字符数组的某个位置开始时,那么第一个参数就要传对应位置的地址。

图解:

 

 

 这里的字符ch和整数num都可以对字符串进行补充,当然也可以是字符串等等...

第一个参数的注意事项:

除了上文提到的比较第一个参数和第二个参数的大小问题,还要注意当你想要在一个字符数组的某个位置开始时,那么第一个参数就要传对应位置的地址。

图解:

 

 

 

 


 

sprintf函数返回值:
函数如果调用成功,则返回写入的字符总数,不包括字符串追加在字符串末尾的空字符。如果失败,则返回一个负数。

图解:

 

 3.字符串转数值,数值转字符串 的一些函数

 

 4.printf()和scanf()函数中*的使用

一、printf和scanf中* 和#的作用

scanf
*在scanf中起到过滤的作用,就比如写入了三个数,而就只想要中间的数,那我们就可以应用 *

int main()
{
    int b;
    scanf("%*d %d %*d",&b);
    printf("%d",b);
    return 0;
}

 

 下面还有一些相关的例子

int main()
{
    int a = 1, b = 1;
    //输入2 2 
    scanf("%d %*d",&a,&b);
    printf("%d %d\n",a,b);
    //输入 2 a 2
    a = 1, b = 1;
    scanf("%d %*c %d",&a,&b);
    printf("%d %d\n",a,b);
    a = 1, b = 1;
    //输入 2 abc 2    
    scanf("%d%*s%d",&a,&b);
    printf("%d %d",a,b);
    return 0;
}

 

 printf
*在printf中类似的用法我们也是见过的,和%5d的用法就很类似,但是 *的用法更加的灵活,它们都是用来限制输出宽度的,*的方法更加灵活,为动态输出格式。

int main()
{
    int a = 2;
    float b = 12.45f;
    char* p = "abcdef";
    printf("%*d\n",10,a);
    printf("%*.*f\n",0,5,b);
    printf("%*.*s",10,3,p);
    return 0;
}

 

 

%*d和%5d的用法是完全一样的,%*.*f和%10.5f也是一样的,

小数点前面的为整体要输出多少位,意味着至少输出*个字符,其中“.”和“+”“-”也算入其中,而小数点后面的为小数点要保留多少位,意味着最多只能输出 * 个字节。

int main()
{
    char* p = "abcdef";
    printf("%3s\n",p);
    printf("%*s\n",3,p);
    printf("%.*s",3,p);
    return 0;
}

 

 

二、printf和scanf中# 的作用

#可以在数值前面输出对应的进制符号

题目:十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。

下面这也就是答案了

#include<stdio.h> 
int main()
 { 
     printf("%#o %#X", 1234, 1234);
     return 0;
 }

 

 例子:

#include<stdio.h> 
int main()
{
    //printf("%#o\n%#X", 1234, 1234);
    printf("%o,%#o,%x,%#x",10,10,10,10);
    return 0;
}

 

 5.math.h函数库

1.绝对值

1.计算双精度浮点数x的绝对值用fabs()
函数原型:

double fabs(double x)

 

2.计算整数x的绝对值用abs()
函数原型:

int abs(int x)

3.求复数的绝对值

函数原型

double cabs(struct complex znum)

 

参数说明:zuum为用结构struct complex表示的复数,定义如下:

struct complex
              {
                double m;
                double n;
              }
#include <stdio.h>
#include <math.h>
int main()
{
    struct complex z;
    double val;
    z.x=2.0;
    z.y=1.0;
    val=cabs(z);
    printf("The absolute value of %.2lfi %.2lfj is %.2lf",z.x,z.y,val);
    return 0;
}

 

2.取整和取余

3.三角函数

4.反三角函数
5.双曲三角函数
6.指数和对数

1.计算x^y(x的y次方)用pow()
函数原型:

double pow(double x,double y)

2.计算e^x用exp()
函数原型:

double exp(double x)

3.计算x的平方根用sqrt()

函数原型:

double sqrt(double x)

 

7.标准化浮点数

7.标准化浮点数

函数原型:

double modf (double x, double *ip);

 


函数功能:将参数的整数部分通过指针回传, 返回小数部分,整数部分保存在*ip中

函数原型:

 double ldexp(double x,int exponent)

 


函数功能: 计算x*2的exponent次幂,即2*pow(2,exponent)的数值

 

8.多项式
9.数学错误计算处理

别的函数具体原型下次补充,要睡觉了zZZ

 

标签:sscanf,int,double,收获,本周,str,printf,字符串
From: https://www.cnblogs.com/wrtcom/p/17301419.html

相关文章

  • 在结队编程过程中,我收获了这些 【Tutorials】
    在结队编程过程中,我收获了这些受到了编程开发领域文档设计的启发’Whatnobodytellsyouaboutdocumentation’,本文结构为四种基本博客文档结构中的Tutorials类型,旨在记录与总结,并以清晰的行文展示出来。......
  • 约会光彩家具,收获优质双层铁床快讯
    在宿舍家具行业,如果您需要采购双层铁床,大多数客户都会选择光彩家具。为什么呢?因为光彩家具双层铁床质量过硬、服务贴心,跟光彩家具公司来场约会吧,这样您就能真真切切的感受到我们的优秀和品质了!耳听为虚眼见为实,只有亲自用过,感受过,才会发现:光彩家具双层铁床的优质。虽然说网络给......
  • 开源 文本到视频:Tune-A-Video 本周 star 增长数:1,050+,主语言:Python
    开源不到48小时获35kstar的推荐算法「GitHub热点速览转载自己笔记备用 非公开  原作者博客园 本周的热点除了GPT各类衍生品之外,还多了一个被马斯克预告过、在愚人节开源出来的推特推荐算法,开源不到2天就有了35k+的star,有意思的是,除了推荐算法本身之外,阅......
  • 本周监管状态更新,以下平台一定要远离!
    监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。以下是监管牌照发生变动的交易商平台,注意警惕!TradeOptionTradeOption,暂未查证到任何有效的监管信息,其外汇天眼APP曝光台显示该平台诱导投资且无法出金,存在巨大风险!TradeOption,天眼评......
  • 个人工作流程学习收获
    一、项目开发流程对于各个整个项目流程进行规划了解,明了自己的处理需求,知道技术点的用处,只需要大概的理解不需要详细的讲解。二、自己开发的模板必须熟练自己负责区域某......
  • 个人工作流程学习收获
    在日常的工作中,我们都会有自己的工作方式和工作流程。每个人的工作方式都可能不同,但在实际工作中,我们需要尽可能地统一工作流程,以便提高工作效率和质量。本播客介绍个人工......
  • 前端实习收获
     在第二大学远程实习学习前端也有一段时间了了,大大小小也踩了不少坑,下面讲一讲自己的学习心得。1.继承虽说JS里没有继承这种说法,但是学会使用继承能极大的提高开发效率。......
  • 本周学习小计划
    本周还是主要学习安卓:列一个小计划1.深入学习RecyclerView2.进一步学习Fragment3.进一步学习Service4.Broadcast/Receiver学习5.ContentProvider学习6.优化一下APP的......
  • 外汇天眼:本周监管状态更新,以下平台一定要远离!
    监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。以下是监管牌照发生变动的交易商平台,注意警惕!ACCUINDEXACCUINDEX,其对外宣......
  • 通过整合lightweight openpose的收获
    1.transformer是对lable和image进行处理。2.训练时图片的批度都是一个大小,验证时可不必遵循。3.paf就是向量图一个x一个y。4.neck是左肩和右肩的关键点。5.最后一个key......