如题所述
var $kongge_num=0;
var $int_num=0;
var $other_num=0;
while((ch=getchar())!='\n')//回车键结束输入,并且回车符不计入
{
if(ch>='a'&&ch<='z'||ch<='z'&&ch>='a')
{
$char_num++;
}
else if(ch==' ')
{
$kongge_num++;
}
else if(ch>='0'&&ch<='9')
{
$int_num++;
}
else
{
$other_num++;
}
}
echo $char_num;
echo $kongge_num;
echo $int_num;
echo $other_num;
望采纳,打字不容易啊本回答被提问者采纳
分数太少,大家都不远动手。追问
没办法,很少用百度知道,没财富值,最后只有五个了,加不上去了。。。我也想到大概是这个思路,谢谢你,但我是新手直接都不会。请问必须用正则吗,可以用函数或者循环做吗?谢谢了。
追答用正则速度快,不过正则考验记忆力,大多数人记不住,每次都要查。
历遍字符串是个好方法:
<?php
$str='abcsdf33肯定撒范德萨发aa6677'; //要遍历的字符串
$len=strlen($temp); //总长度
//数字范围数组
$_num=array(1,2,3,4,5,6,7,8,9,0);
$num_i=0;
//字母范围数组
$_zimu=array('a','b'....'A','B'....'Z');
$zimu_i=0;
for($i=0;$i<$len;$i++){
$char=substr($str,$i,1); //当前字符
//开始判断是否是数字
if(in_array($char,$_num){
$num_i++;
}else if(in_array($char,$_num){//开始判断是否是字母
$zimu_i++;
}else if(preg_match('/^([\x81-\xfe][\x40-\xfe]){0,2}$/',$char)){ //判断中文GB2312
$chinese_i++;
}else if(preg_match("/[\x80-\xff]./", $char)){//判断中文uft8
$chinese_i++;
}else if(preg_match("/[\x80-\xff]./", $char)){//判断中文uft8
$chinese_i++;
}else if($char==' '){//判断空格
$null _i++;
}else if($char==' '){//其他
$other _i++;
}
}