PHP 标准输入输出流 A题必备

本文介绍如何使用PHP进行在线编程竞赛(A题),重点讲解了标准输入输出流的使用方法,特别是如何处理多行输入和空格分隔的数字数组,通过实际例子展示了如何利用trim和explode函数解决常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近一直在准备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题

file


file

完美A题成功

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值