函数sscanf()及sprintf()的简单讲解 --- NOJ 2015 PUMA

本次讲解将结合NOJ-2015和cplusplus.com的讲解进行,

题目链接如下:

http://acm.njupt.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2015

cplusplus的地址:

http://www.cplusplus.com/

从字面理解这两个函数的意思分别是从字符串读入输出到字符串,即

Read formatted data from stringWrite formatted data to string;

顾名思义,对sscanf()如果你想输入了一个字符串,你想从里面提取一些数据,如int型数,double型,字符子串等,就可以使用了。对sprintf(),就是生成一个字符串,可以使用你想生成的数据进行组合。

一定注意两个函数的返回值~~

对sscanf():

On success, the function returns the number of items in the argument list successfully filled. This count can match the expected number of items or be less (even zero) in the case of a matching failure.

In the case of an input failure before any data could be successfully interpreted, EOF is returned.

即返回成功读入的变量的数目。

对sprintf():

On success, the total number of characters written is returned. This count does not include the additional null-character automatically appended at the end of the string.

On failure, a negative number is returned.

即返回成功赋值的所有字符长度。

具体见示例代码(有删改):

sscanf()的示例代码:

#include <stdio.h>
int main ()
{
  char sentence []="Rudolph is 12 years old";
  char str [20];
  int i;
  int n=sscanf (sentence,"%s %*s %d",str,&i); //%*s表示跳过这个变量(注1)
  printf ("%s -> %d\n",str,i);
  printf("%d\n",n);

  return 0;
}

Output:

Rudolph -> 12

2

//即表示成功读入了2个变量

%*s 的用法见:http://blog.csdn.net/why850901938/article/details/51298656

sprintf()的示例代码:

/* sprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
  printf ("[%s] is a string %d chars long\n",buffer,n);
  return 0;
}

Output:

[5 plus 3 is 8] is a string 13 chars long

//空格算入了字符数量

最后来看这个题目,只有从输入的字符串中提取数据,才能进行接下来的运算。

所以使用sscanf()进行操作。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int pri,num,zhe;
char a[20];
double sum;
int main()
{
    int T;
    scanf("%d",&T);
    getchar();
    for(int i=0;i<T;i++)
    {
        gets(a);
        int l=strlen(a);
        if(a[l-1]==‘%‘)
        {
            a[l-1]=‘\0‘;
            sscanf(a,"%d %d %d",&pri,&num,&zhe);
            sum+=pri*num*(100-zhe)*0.01;
        }
        else
        {
            sscanf(a,"%d %d",&pri,&num);
            sum+=pri*num;
        }
    }
    printf("%.2lf\n",sum);
    return 0;
}

仅代表个人观点,欢迎交流探讨,勿喷~~~

PhotoBy:WLOP

http://weibo.com/wlop

时间: 2024-10-18 15:13:54

函数sscanf()及sprintf()的简单讲解 --- NOJ 2015 PUMA的相关文章

sscanf和sprintf是scanf和printf家族用法 (转)

sscanf和sprintf是scanf和printf家族用法 sscanf和sprintf是scanf和printf家族的一对成员,用于处理和分析字符串非常强大得两个函数头文件 stdio.h原型int sscanf(const char *buffer,const char *format,...);int sprintf(char *buffer,const char *format,...);功能:类似于scanf和printf 但把字符串*buffer用于输入输出1.sprintf用于

C语言函数sscanf()的用法 (转载

在我的学习过程中,从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都是用于输入的,只是后者以屏幕(stdin)

C语言函数sscanf()的用法(转)

转自:http://www.cnblogs.com/lyq105/archive/2009/11/28/1612677.html C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf

sscanf及sprintf

在程序中,我们肯定会遇到许多处理字符串的操作,当然C++中的string类已经做了很好了,但是也不要忘了C中的sscanf和sprintf 这两个函数用法跟printf和scanf用法很相似,只不过数据源和数据目的地从标准输入输出转换成了内存中的字符串. int sscanf ( const char * s, const char * format, ...); 1 /* sscanf example */ 2 #include <stdio.h> 3 4 int main () 5 { 6

机器学习实战之一---简单讲解决策树

机器学习实战之一---简单讲解决策树 https://blog.csdn.net/class_brick/article/details/78855510 前言:本文基于<机器学习实战>一书,采用python语言,对于机器学习当中的常用算法进行说明. 一. 综述 定义:首先来对决策树进行一个定义,决策树是一棵通过事物的特征来进行判断分支后得到该事物所需要的预测的属性的树. 流程:提取特征à计算信息增益à构建决策树à使用决策树进行预测 关键:树的构造,通过信息增益(熵)得到分支点和分支的方式.

矩阵快速幂 模板与简单讲解

模板 快速幂模板 1 void solve(matrix t,long long o) 2 { 3 matrix e; 4 5 memset(e.a,0,sizeof(e.a)); 6 7 for (int i = 0;i < d;i++) 8 e.a[i][i] = 1; 9 10 while (o) 11 { 12 if (o & 1) 13 { 14 e = mul(e,t); 15 } 16 17 o >>= 1; 18 19 t = mul(t,t); 20 } 21

WeX5的简单介绍及UI的简单讲解

WeX5的简单介绍及UI的简单讲解 (2016-01-13 14:49:05) 标签: it 分类: WeX5的初步自学 一.WeX5的简单讲解 1.WeX5是前端快速开发框架,可开发跨端运行应用.是移动App/微信/WebApp开发利器,一次开发多平台运行. 二.WeX5平台了解 1.菜单和工具栏 :查看API:启动Tomcat:搜索:首选项:复位透视图 2.透视图 :导入java项目:使用svn 3.模型资源 :文件对比 :新建.复制.删除:重命名文刷件新及文件夹:模型编译 切换到资源管理器

FTP的搭建与虚拟目录作用&lt;之简单讲解&gt;

操作系统:win7 VS2010编写WebService与在IIS的发布<之简单讲解>中我已经说了IIS安装与使用,不明白的可以跳过去看. 1.添加FTP站点 2. 3. 4. 5. zqz上的小黑点代表未启动,记得要启动! 6.打开浏览器 7.添加虚拟目录 8. 9.qq添加成功 10. 11.再次添加一个虚拟目录:aa 12. 13. 14.这里我为什么要添加两个虚拟目录呢?一个是qq一个是aa.这就引出了虚拟目录的重要作用. 虚拟目录就是将其他目录以映射的方式虚拟到该FTP服务器的主目录

Android事件总线分发库EventBus3.0的简单讲解与实践

Android事件总线分发库EventBus的简单讲解与实践 导语,EventBus大家应该不陌生,EventBus是一款针对Android优化的发布/订阅事件总线.主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅.以及将发送者和接收者解耦.反正能帮助我们快速开发,这个确实是个好东西,其实鸿洋大神已经对源码作了一个较全面的剖析了 Android EventBus源码解析 带你深入理解Ev