php-输入两个字符串,从第一字符串中删除第二个字符串中所有的字符

这道题目是好未来的笔试题,我是在牛客上看到的,因为对于php比较熟悉所以就用php试着解决一下,但是不知道是牛客在线编译系统的问题还是其他问题,我在自己本地的编译器上可以正常运行,但是在牛客上一直显示case率是25%


但是这个方法自我感觉是争取的,分享一下看看:

首先题目要求是从第一个字符串中删除第二个字符串中的所有字符,这个就不禁让我们想到使用数组相减的方法,字符串和数组不分家,一般考察字符串就不能不向着数组考虑,php中有一个自带的函数array_diff,主要是求两个数组的差集,不懂的可以看看php的手册

1。首先定义一个函数

function del_sub_str($str,$sub) {
    $strlen = iconv_strlen($str,"UTF-8");
    $sublen = iconv_strlen($sub,"UTF-8");

    $strarray = array();
    $subarray = array();

    for ($i = 0;$i < $strlen;$i++) {
        $strarray[] = iconv_substr($str,$i,1,"UTF-8");
    }

    for($i=0;$i<$sublen;$i++){
        $subarray[]=iconv_substr($sub,$i,1,'utf-8');//将第二个字符串转换成数组
    }

    $diff = array_diff($strarray,$subarray);
    // 将数组转换成字符串
    echo implode(' ',$diff);
}
先将这两个字符串转换成数组的形式,然后在求这两个数组的差集,最后使用implode函数分割成字符串输出


大家可以在这里看到使用iconv_strlen()、iconv_substr()  使用这个函数主要是为了防止输入的字符串是中文的情

最后调用该函数就可以了


del_sub_str('They are students.','aeiou');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值