使用 PHP A 题 PHP 的标准输入输出流
最近一直在准备php的实习生面试,所以也需要A一些笔试题,在赛码网,牛客网上面看见,A题有php的选项了,特别高兴,毕竟之前一直都是使用C++来A题
但是php我们经常用来做web,命令行运行其实挺少见的,所以自己对php的标准输入与输出流也不是非常的清楚,于是我就查阅了一下,发现讲如何用php来A题的帖子非常少,所以就打算把自己学习的经验分享给大家
-
STDIN 是php 标准输入流 我们所以
fgets(STDIN)
即可向命令行输入但是
fgets(STDIN)
有一个致命的缺点,就是当它遇到换行符(包括在返回值中)、EOF 就会停止
<?php
$arr[]= fgets(STDIN);
var_dump($arr);
输入5 就会立马停止 如下面所示
C:\wamp64\www\data\array>php array.php
5
array(1) {
[0]=>
string(3) "5
"
}
这时如果有细心的就会发现,明明我输入的是5,为什么打印出来的是string(3) "5"
5应该只算一个字符啊,其实这是因为我们结束输入换行时,系统默认加入了 \n
这两个字符,我们从"
被换行也可以看出这一点
下面我们尝试使用 trim 函数来尝试去除\n
换行符看是否有效
<?php
$arr[]= trim(fgets(STDIN));
var_dump($arr);
还是输入5
C:\wamp64\www\data\array>php array.php
5
array(1) {
[0]=>
string(1) "5"
}
完美解决了,标准输入输出带换行的问题
-
但是我们A题的时候输入不可能,每次输入都让我们换行,偶尔也会出现一行输入的问题
如下面的输入
拿简单的排序题目来举例
输入数组大小n
在依次输入数组元素
输出数组升序的结果
输入输出用例
输入
5
2 3 1 4 5
输出
1 2 3 4 5
在用c++的方法来输入,如下
<?php
$n= trim(fgets(STDIN));
for ($i=0;$i<$n;$i++)
{
$arr[$i]= trim(fgets(STDIN));
}
var_dump($arr);
但是结果会如下
C:\wamp64\www\data\array>php array.php
5
1 2 3 4 5
1
1
1
1
array(5) {
[0]=>
string(9) "1 2 3 4 5"
[1]=>
string(1) "1"
[2]=>
string(1) "1"
[3]=>
string(1) "1"
[4]=>
string(1) "1"
}
会发现 ,换行之后我们还要输出,不能实现完美的和用例一样的输入
经过多番的查找之后终于发现了一个靠谱的方法可以解决这个问题使用 explode 函数把空格分割
我们只需要 输入 1 2 3 4 5就会自动变成 一个以1 2 3 4 5 为元素的数组
具体效果如下
<?php
$n= trim(fgets(STDIN));
$arr = explode(" ", trim(fgets(STDIN)));
var_dump($arr);
结果为
C:\wamp64\www\data\array>php array.php
5
5 4 3 2 1
array(5) {
[0]=>
string(1) "5"
[1]=>
string(1) "4"
[2]=>
string(1) "3"
[3]=>
string(1) "2"
[4]=>
string(1) "1"
}
完美解决了我们的问题
下面我们试试在赛码网A题
完美A题成功
本作品采用《CC 协议》,转载必须注明作者和本文链接
这里的$n,没用上啊,怎么根据这个$n限制一行输入字符的个数?