欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

恶搞 关于腾讯的那道题截取字符串的题

程序员文章站 2024-04-05 14:45:30
...
题目是:
假设有"123abc456def789"这么一个字符串,写一个函数,可以传入一个字符串,和一个要截取的长度。返回截取后的结果。

要求:
1 标记不得计算在长度之内。
2 截取后的字符串,要保留原有标签,不过如果最后有一个标签没有闭合,则去掉其开始标签。

示例:
题中的字符串,要截取长度5,则返回的字符串应该为:123ab,要截取长度8,应返回123abc45。

 5.3 可以把注释去掉{    $i=$j=0;    while(strlen($saveString)')                {                    $number[$j++][$k++]=$i;                    break;                }            }while($str[$i++] != '>');        }        else        {            $saveString.=$str[$i];            /*if(strlen($saveString) == $size)            {                if($str[++$i] =='' : continue;            case ' ' : break;            default  : $newstr .= $str[$i];        }    }    return $newstr;}function deleteReservedTag(&$string, &$number, $reserved) // 从标签组里去除 保留标签{	$stringLength   = count($string);	$reservedLength = count($reserved);    for($i=0; $i123
abc45
6
defg789';$size=15;$reserved = array //保留标签( '
', '
', '
', '
');$string[]=''; // 保存所有标签$number[][]=0; // 保存所有标签位置$saveString = ''; // 保存截取标签后的所有字符串$newString = ''; // 保存所有未截取标签的字符串find($str, $size, $string, $number, $saveString, $newString); // 查找标签deleteReservedTag($string, $number, $reserved); // 从标签组里去除 保留标签compare($string, $number); // 从标签组里去除 成对标签replace($string, $number, $newString);printf("截取长度:%d\n\n", $size);printf("完整长度:%s\n\n",$str);printf("处理结果:%s\n\n", $string);printf("截取长度:%s (%s)\n\n",$saveString,strlen($saveString));printf("未处理前:%s\n",$newString);?>



运算结果如下
------------------------------------------------------------------------------------
截取长度:15

完整长度:

123
abc45


6defg789



处理结果:123
abc45
6
defg78

截取长度:123abc456defg78 (15)

未处理前:

123
abc45


6defg78


回复讨论(解决方案)

P4+768MB 机运行速度如下

内存使用情况:2176
算法运行时间(microtime):0.0012378692626953

欢迎各位 PHP 爱好者来 QQ群:23930992

程序处理一些特殊数据的时候会出问题,请把代码粘贴到上面

function filter($str) // 过滤标签,然后进行比较
{
$newstr = '';
$strLength = strlen($str);
for($i=0;$i {
switch($str[$i])
{
case ' case '/' : continue;
case '>' : continue;
case ' ' : break 2;
default : $newstr .= $str[$i];
}
}
return $newstr;
}

又修正一个错误,请把下面代码粘贴到上面

function replace(&$string, $number, $newString){    $tempString       = '';    $saveStringLength = strlen($newString);    $stringLength     = count($string);    for($i=0, $j=0; $i   

完整修改后的代码

 5.3 可以把注释去掉{    $i=$j=0;    while(strlen($saveString)')                {                    $number[$j++][$k++]=$i;                    break;                }            }while($str[$i++] != '>');        }        else        {            $saveString.=$str[$i];            /*if(strlen($saveString) == $size)            {                if($str[++$i] =='' : continue;            case ' ' : break 2;            default  : $newstr .= $str[$i];        }    }    return $newstr;}function deleteReservedTag(&$string, &$number, $reserved) // 从标签组里去除 保留标签{	$stringLength   = count($string);	$reservedLength = count($reserved);    for($i=0; $i	
		
364867的玉米小店
买家信用:0
卖家好评率:100.00%
买家好评率:0.00%
注册时间:2010年04月29日
荣誉资质:恶搞 关于腾讯的那道题截取字符串的题
恶搞 关于腾讯的那道题截取字符串的题
';$size=160;$reserved = array //保留标签( '
', '
', '
', '
', '恶搞 关于腾讯的那道题截取字符串的题', '恶搞 关于腾讯的那道题截取字符串的题');$string[]=''; // 保存所有标签$number[][]=0; // 保存所有标签位置$saveString = ''; // 保存截取标签后的所有字符串$newString = ''; // 保存所有未截取标签的字符串find($str, $size, $string, $number, $saveString, $newString); // 查找标签deleteReservedTag($string, $number, $reserved); // 从标签组里去除 保留标签compare($string, $number); // 从标签组里去除 成对标签replace($string, $number, $newString);printf("截取长度:%d\n\n", $size);printf("完整长度:%s\n\n",$str);printf("处理结果:%s\n\n", $string);printf("截取长度:%s (%s)\n\n",$saveString,strlen($saveString));printf("未处理前:%s\n",$newString);echo "内存使用情况:",(memory_get_usage()-$stmem),"\n";echo "算法运行时间(microtime):",(microtime(true)-$sttime),"\n";?>




截取长度:160




完整长度:





364867的玉米小店

买家信用:0

卖家好评率:100.00%

买家好评率:0.00%

注册时间:2010年04月29日

荣誉资质:恶搞 关于腾讯的那道题截取字符串的题

恶搞 关于腾讯的那道题截取字符串的题














处理结果:



364867的玉米小店

买家信用:0

卖家好评率:100.00%

买家好评率:0.00%

注册





截取长度:



364867的玉米小店
买家信用:0
卖家好评率:100.00%
买家好评率:0.00%
注册 (160)






未处理前:



364867的玉米小店

买家信用:0

卖家好评率:100.00%

买家好评率:0.00%

注册


内存使用情况:5096

算法运行时间(microtime):0.0040628910064697

精简后的代码

');            $number[$j++][$k]=$i;        }        else        {            $saveString.=$str[$i];        }        $i++;    }    for($j=0; $j' : continue;            case ' ' : break 2;            default  : $newstr .= $str[$i];        }    }    return $newstr;}function deleteReservedTag(&$string, &$number, $reserved) // 从标签组里去除 保留标签{    $stringLength   = count($string);    $reservedLength = count($reserved);    for($i=0; $i123
abc45
6
defg789';$size=15;$reserved = array //保留标签( '
', '
', '
', '
', '恶搞 关于腾讯的那道题截取字符串的题', '恶搞 关于腾讯的那道题截取字符串的题');$string[]=''; // 保存所有标签$number[][]=0; // 保存所有标签位置$saveString = ''; // 保存截取标签后的所有字符串$newString = ''; // 保存所有未截取标签的字符串find($str, $size, $string, $number, $saveString, $newString); // 查找标签deleteReservedTag($string, $number, $reserved); // 从标签组里去除 保留标签compare($string, $number); // 从标签组里去除 成对标签//deleteSpaceArray($string, $number); // 删除标签组里空下来的空间//deleteSpaceArray($string, $number); // 删除标签组里空下来的空间replace($string, $number, $newString);printf("截取长度: %u\n\n", $size);printf("完整长度: %s\n\n", $str);printf("截取长度: %s (%u)\n\n", $saveString, strlen($saveString));printf("处理结果: %s\n\n", $string);printf("未处理前: %s\n\n", $newString);printf("内存使用情况:%u\n", memory_get_usage()-$stmem);printf("算法运行时间(microtime): %f\n", microtime(true)-$sttime);?>

研究得好透彻啊

人都去那了啊,郁闷了

$s = '123abc456def789def789def789def789';function subs($s, $len){//此函数参数有二:$s - 源字符串,    $len - 要截取的长度        (当让你也可以将标签传进来,不过要进行其他操作)    $s1 = $s;    $s1 = preg_replace('//s', '', $s1);    $sub = mb_substr($s1, 0, $len, 'gbk');    //处理成数组    $s2 = $s;    $s2 = preg_replace('//s', '[p]', $s2);    $arr = explode('[p]', $s2);    $arr1 = $arr2 = array();    $num = count($arr);    $num1 = $num2 = 0;    $bs = 0;    for($i = 0; $i = $len){            $num1 = $len - $num2 + strlen($arr[$i]);            if($num1 != strlen($arr[$i]))$bs = 1            $s3 = mb_substr($arr[$i], 0, $num1, 'gbk');            $arr[$i] = $s3;            $arr2 = array_slice($arr, 0, $i + 1);            break;        }    }    //处理数组,结合成所需要的成字符串    $num = count($arr2);    $s4 = '';    for($i =  0; $i   

支持盗版!!!

恶搞 关于腾讯的那道题截取字符串的题

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频


网友评论

文明上网理性发言,请遵守 新闻评论服务协议

我要评论
  • 恶搞 关于腾讯的那道题截取字符串的题
  • 专题推荐

    作者信息
    恶搞 关于腾讯的那道题截取字符串的题

    认证0级讲师

    推荐视频教程
  • 恶搞 关于腾讯的那道题截取字符串的题javascript初级视频教程
  • 恶搞 关于腾讯的那道题截取字符串的题jquery 基础视频教程
  • 视频教程分类