sscanf定义和用法及分析

 更新时间:2016年11月25日 16:48  点击:2142

sscanf定义和用法及分析
sscanf() 函数根据指定的格式解析来自一个字符串的输入。

如果只向该函数传递两个参数,数据将以数组的形式返回。否则,如果传递了额外的参数,那么被解析的数据会存储在这些参数中。如果区分符的数目大于包含它们的变量的数目,则会发生错误。不过,如果区分符少于变量,则额外的变量包含 null。

语法
sscanf(string,format,arg1,arg2,arg++)参数 描述
string 必需。规定要读取的字符串。
format 必需。规定要使用的格式。
arg1 可选。存储数据的第一个变量。
arg2 可选。存储数据的第二个变量。
arg++ 可选。存储数据的第三、四个变量。依此类推。

说明
参数 format 是转换的格式,以百分比符号 ("%") 开始到转换字符结束。下面的可能的 format 值:

%% - 返回百分比符号
%b - 二进制数
%c - 依照 ascii 值的字符
%d - 带符号十进制数
%e - 可续计数法(比如 1.5e+3)
%u - 无符号十进制数
%f - 浮点数(local settings aware)
%f - 浮点数(not local settings aware)
%o - 八进制数
%s - 字符串
%x - 十六进制数(小写字母)
%x - 十六进制数(大写字母)
例子
<?php教程
$string = "age:30 weight:60kg";
sscanf($string,"age:%d weight:%dkg",$age,$weight);
// show types and values
var_dump($age,$weight);
?>输出:

int(30)
int(60)

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

输入应采用如下形式

a=12,b=24,c=36
采用这种形式是为了使用户输入数据时添加必要的信息,使含义清楚,不易发生输入数据的错误。

——谭浩强,《c语言程序设计》(第2版),清华大学出版社,2008年11月,p71~72

这段文字很唬人,貌似讲的头头是道,其实愚蠢透顶。

程序是用来为用户解决问题的,而不是用来给用户添麻烦的。

任何一个合格的程序员都不会写出

scanf("a=%f,b=%f,c=%f",&a,&b,&c);
这样的代码。理由是,要求用户输入的“a=”、“b=”、“c=”以及两个“,”都毫无意义。把这句蹩脚的代码稍微更改一下,就不难发现其愚蠢。它基本上等价于

scanf("a=");

scanf("%f",&a);

scanf(",");

scanf("b=");

scanf("%f",&b);

scanf(",");

scanf("c=");

scanf("%f",&c);

其中的scanf("a=");、scanf("b=");、scanf("c=");和scanf(",");对于程序来说根本没有任何信息价值,增加这些代码的唯一效果就是给用户增加了许多不必要的麻烦。万一用户输入错误,还可以导致程序“挂掉”或出错。

因此引文不但愚蠢,而且简直是在教唆学习者自虐——程序员总是程序的第一个使用者。

那段引文应该修改为

“如果是

scanf("a=%f,b=%f,c=%f",&a,&b,&c);

输入应采用如下形式

a=12,b=24,c=36
采用这种形式是为了使用户输入数据时同时给用户添加不必要的麻烦,使含义混乱,容易发生输入数据的错误。”

对用户友好的、具有良好易用性的程序代码其实应该这样写

printf("a=");

scanf("%f",&a);

printf ("b=");

scanf("%f",&b);

printf ("c=");

scanf("%f",&c);

通过调用函数printf()给用户以提示,而不是用“scanf("a=");”这样的代码来折磨用户

str_replace() 函数使用一个字符串替换字符串中的另一些字符。

简单替换

<?php教程
echo str_replace("world","john","hello world!");
?>

替换数据

<?php
echo str_replace("world","john","hello world!");
?>

利用正则表达式来替换

语法:stringobj.replace(rgexp, replacetext)
用str.replace("|",",") 只会替换第一个匹配的字符, str.replace(/|/g,",")则可以替换掉全部匹配的字符(g为全局标志)。


语法
preg_replace(find,replace,string,count)

preg_replace -- 执行正则表达式的搜索和替换
说明
mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])


在 subject 中搜索 pattern 模式的匹配项并替换为 replacement。如果指定了 limit,则仅替换 limit 个匹配,如果省略 limit 或者其值为 -1,则所有的匹配项都会被替换。

实例

<?php
$string = "april 15, 2003";
$pattern = "/(/w+) (/d+), (/d+)/i";
$replacement = "/${1}1,/$3";
print preg_replace($pattern, $replacement, $string);

/* output
   ======

april1,2003

*/
?>

替换数个值

<?php
$patterns = array ("/(19|20)(/d{2})-(/d{1,2})-(/d{1,2})/",
                   "/^/s*{(/w+)}/s*=/");
$replace = array ("//3///4///1//2", "$//1 =");
print preg_replace ($patterns, $replace, "{startdate} = 1999-5-27");
?>

本例将输出:

$startdate = 5/27/1999
 


例子 4. 使用 /e 修正符

<?php
preg_replace ("/(<//?)(/w+)([^>]*>)/e",
              "'//1'.strtoupper('//2').'//3'",
              $html_body);
?>

这将使输入字符串中的所有 html 标记变成大写
 

区别preg_replace函数主要用于正则比较方便而str_replace替换字符效率更好,但他们都用于字符替换的函数。

 

参数中的数组被当成一个表的列并以行来进行排序 - 这类似 sql 的 order by 子句的功能。第一个数组是要排序的主要数组。数组中的行(值)比较为相同的话,就会按照下一个输入数组中相应值的大小进行排序,依此类推。

 

<?php教程
$a1=array("dog","cat");
$a2=array("fido","missy");
array_multisort($a1,$a2);
print_r($a1);
print_r($a2);
?>输出:

array ( [0] => cat [1] => dog )
array ( [0] => missy [1] => fido )


例子 6. 名次排列

<?php
$grade = array("score" => array(70, 95, 70.0, 60, "70"),
               "name" => array("zhang san", "li si", "wang wu",
                               "zhao liu", "liu qi"));
array_multisort($grade["score"], sort_numeric, sort_desc,
                // 将分数作为数值,由高到低排序
                $grade["name"], sort_string, sort_asc);
                // 将名字作为字符串,由小到大排序
var_dump($grade);
?> 

上例将输出:

array(2) {
  ["score"]=>
  array(5) {
    [0]=>
    int(95)
    [1]=>
    string(2) "70"
    [2]=>
    float(70)
    [3]=>
    int(70)
    [4]=>
    int(60)
  }
  ["name"]=>
  array(5) {
    [0]=>
    string(5) "li si"
    [1]=>
    string(6) "liu qi"
    [2]=>
    string(7) "wang wu"
    [3]=>
    string(9) "zhang san"
    [4]=>
    string(8) "zhao liu"
  }
}


 

多维数组排序:

<?php
$arr = array (array (1, 2, 3, 4), array ("a", "b", "b", "d"));
array_multisort($arr[0], sort_desc, $arr[1], sort_asc);
print_r($arr);
?>
运行该例子输出:

array
(
    [0] => array
        (
            [0] => 4
            [1] => 2
            [2] => 2
            [3] => 1
        )
 
    [1] => array
        (
            [0] => d
            [1] => b
            [2] => c
            [3] => a
        )
)


array_multisort() 函数对多个数组或多维数组进行排序。

先来看一个实例,

header('location: http://www.111cn.net/');

上面是简单的调跳,我们要做永久转向怎么做呢。如下。


语法
header(string,replace,http_response_code)参数 描述
string 必需。规定要发送的报头字符串。
replace 可选。指示该报头是否替换之前的报头,或添加第二个报头。

默认是 true(替换)。false(允许相同类型的多个报头)。
 
http_response_code 可选。把 http 响应代码强制为指定的值。(php教程 4 以及更高版本可用)


其它中 http_response_code 就是我们要写的301代码了,如下.


$url = "http://www.111cn.net";
header("http/1.1 301 moved permanently");
header("location: $url");
exit();

注释:从 php 4.4 之后,该函数防止一次发送多个报头。这是对头部注入攻击的保护措施。

一般最简单就是字符替换了

如:str_replace("#", "-", "dizaz#7#final"),

更高级的就是保存数据替换了。

str_replace(array('#', '$'), "-", "dizaz#7$final") 等,就这些调用方式,

其它这些方法在php教程中最非常简单的,还有就是数组替换数据

str_repace( array(1,2,3,4,5),'',array(6,7,8,9,10));

这就是替换函数哦。

$object = "dizaz#7#final";
$res = str_replace("#", "-", $object);
echo $res;

[!--infotagslink--]

相关文章

  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • C#创建自定义控件及添加自定义属性和事件使用实例详解

    这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • Vue 组件复用多次自定义参数操作

    这篇文章主要介绍了Vue 组件复用多次自定义参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • 自定义jquery模态窗口插件无法在顶层窗口显示问题

    自定义一个jquery模态窗口插件,将它集成到现有平台框架中时,它只能在mainFrame窗口中显示,无法在顶层窗口显示. 解决这个问题的办法: 通过以下代码就可能实现在顶层窗口弹窗 复制代码 代码如下: $(window.top.documen...2014-05-31
  • 自定义feignClient的常见坑及解决

    这篇文章主要介绍了自定义feignClient的常见坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-20
  • pytorch 自定义卷积核进行卷积操作方式

    今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-06
  • MYSQL事务回滚的2个问题分析

    因此,正确的原子操作是真正被执行过的。是物理执行。在当前事务中确实能看到插入的记录。最后只不过删除了。但是AUTO_INCREMENT不会应删除而改变值。1、为什么auto_increament没有回滚?因为innodb的auto_increament的...2014-05-31
  • PHP YII框架开发小技巧之模型(models)中rules自定义验证规则

    YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在相应的视图(views)里面添加了表单,在表单被提交之前程序都会自动先来这里面的规则里验证,只有通过对其有效的限制规则后才能被提交,可以很有效地保证...2015-11-24
  • jquery自定义插件开发之window的实现过程

    这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
  • iscroll.js 用法介绍

    最新版下载: http://www.csdn123.com/uploadfile/2015/0428/20150428062734485.zip 概要 iScroll 4 这个版本完全重写了iScroll这个框架的原始代码。这个项目的产生...2016-05-19
  • C#中的try catch finally用法分析

    这篇文章主要介绍了C#中的try catch finally用法,以实例形式分析了try catch finally针对错误处理时的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • Mysql索引会失效的几种情况分析

    索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)  注意:要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 ...2014-06-07
  • C++中cin的用法详细

    这篇文章主要介绍了C++中cin的用法详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • C#自定义事件监听实现方法

    这篇文章主要介绍了C#自定义事件监听实现方法,涉及C#事件监听的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#之用户定义的数据类型转换介绍

    c#允许定义自己的数据类型,这意味着需要某些工具支持在自己的数据类型间进行数据转换。方法是把数据类型转换定义为相关类的一个成员运算符,数据类型转换必须声明是隐式或者显式,以说明怎么使用它...2020-06-25
  • 示例详解react中useState的用法

    useState 通过在函数组件里调用它来给组件添加一些内部 state,React 会在重复渲染时保留这个 state,接下来通过一个示例来看看怎么使用 useState吧...2021-06-04
  • python 爬取京东指定商品评论并进行情感分析

    本文主要讲述了利用Python网络爬虫对指定京东商城中指定商品下的用户评论进行爬取,对数据预处理操作后进行文本情感分析,感兴趣的朋友可以了解下...2021-05-28