关于c++ isalpha函数的问题 20

程序打算返回字符串中字母可汉字的个数,用到了isalpha函数程序如下:#include<iostream>usingnamespacestd;intmain(){cha... 程序打算返回字符串中字母可汉字的个数,用到了isalpha函数
程序如下:
#include <iostream>
using namespace std;
int main()
{
char str[20]="I love 清华";
char* p=str;
int i=0;
float numcha=0;
int numlet=0;
while(p[i]!='\0')
{
if(p[i]<0)
numcha+=0.5;
if(isalpha( p[i]))
numlet+=1;

i++;
}
cout<<"汉字个数为:"<<numcha<<endl;
cout<<"字母个数为:"<<numlet<<endl;
return 0;
}

但是却发现结果显示是这样的,字母数量多了一个

假如我把字符串改为"清",那么依旧显示有一个字母。
然而华字不会产生这种情况,改变其他字发现“天”和“大”都有这种问题。我觉得是函数误认为汉字的unicode对应了字母的ASCII码。
但是分开输入“大”的unicode:B4F3时函数反应正确无误。
不知道哪里出现问题了,希望大家帮助解决这个问题~~
展开
 我来答
sailingzyf
2012-07-19 · TA获得超过1330个赞
知道小有建树答主
回答量:860
采纳率:0%
帮助的人:1059万
展开全部
LZ我试了下也正常的,字母5个。你用的什么环境,试着单步运行下,看在哪个不是字母的地方却返回了真值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
BTzjzxxx
2012-07-19 · TA获得超过4534个赞
知道大有可为答主
回答量:981
采纳率:0%
帮助的人:658万
展开全部
else if(isalpha(p[i])),如果是中文就不再判断是否是字母了。

不过我在VS2005下运行结果是正确的,可能与编译器也有关
追问
的确可以用else if不过用if 也不应该出问题,如果是编译器问题是因为我这个64位的和32位的程序不兼容有关吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式