php题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。求解?
1个回答
展开全部
用正则:
echo $str = " a b1c你 2好 34 ^&*5";
preg_match_all("/[0-9]{1}/",$str,$arrNum);
preg_match_all("/[a-zA-Z]{1}/",$str,$arrAl);
preg_match_all("/([/x{4e00}-/x{9fa5}]){1}/u",$str,$arrCh);
$length = strlen($str)-(count($arrNum[0])+count($arrAl[0])+count($arrCh[0]));
for ($i=0;$i<strlen($str);$i++){
if($str[$i] == " " ||$str[$i] == " "){
$num ++;
}
}
echo "字母个数:".count($arrAl[0])."<br/>";
echo "中文个数:".count($arrCh[0])."<br/>";
echo "空格个数".$num."<br/>";
echo "数字个数:".count($arrNum[0])."<br/>";
echo "其他字符个数:".$length;
echo $str = " a b1c你 2好 34 ^&*5";
preg_match_all("/[0-9]{1}/",$str,$arrNum);
preg_match_all("/[a-zA-Z]{1}/",$str,$arrAl);
preg_match_all("/([/x{4e00}-/x{9fa5}]){1}/u",$str,$arrCh);
$length = strlen($str)-(count($arrNum[0])+count($arrAl[0])+count($arrCh[0]));
for ($i=0;$i<strlen($str);$i++){
if($str[$i] == " " ||$str[$i] == " "){
$num ++;
}
}
echo "字母个数:".count($arrAl[0])."<br/>";
echo "中文个数:".count($arrCh[0])."<br/>";
echo "空格个数".$num."<br/>";
echo "数字个数:".count($arrNum[0])."<br/>";
echo "其他字符个数:".$length;
追问
能用while函数吗?
追答
你要的while写法,效率没直接正则高,既然你要我就写,采纳吧:
echo $str = ' a b1c你 2好 ^&*34 5';
$spaceNums=0;
$arrNums=0;
$arrAlNums=0;
$i=0;
preg_match_all("/([\x{4e00}-\x{9fa5}]){1}/u",$str,$arrCh);
while ($i0){
$arrNums++;
}
preg_match_all("/[a-zA-Z]{1}/",$str[$i],$arrAl);
if(count($arrAl[0])>0){
$arrAlNums++;
}
$i++;
}
$length =strlen($str)-$arrAlNums-3*count($arrCh[0])-$spaceNums-$arrNums;
echo "字母个数:".$arrAlNums."";
echo "中文个数:".count($arrCh[0])."";
echo "空格个数".$spaceNums."";
echo "数字个数:".$arrNums."";
echo "其他字符个数:".$length."";
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询