c++ isalpha函数的问题
程序打算返回字符串中字母可汉字的个数,用到了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时函数反应正确无误。
不知道哪里出现问题了,希望大家帮助解决这个问题~~ 展开
程序如下:
#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时函数反应正确无误。
不知道哪里出现问题了,希望大家帮助解决这个问题~~ 展开
2个回答
展开全部
isalpha 判断 1个 char 的 ASCII 值,等同:
if ( ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) ) { 这是英文ASCII字母} else {这不是英文ASCII字母};
-------
汉字有各种编码,GB,BIG5,GBK, GB18030, 对应 的 unicode big endian, unicode little endian,
UTF-8,UTF-16 等。 UTF-8 可能是 1 byte, 2bytes, 3bytes, ...
所以 没有办法简单 地 帮你解决问题。
搞清自己输入的编码,再想对策。
---
纯GB2312原码,用 双字节 ,每个字节编码 都大于 0xa0 判断。
if ( ((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z')) ) { 这是英文ASCII字母} else {这不是英文ASCII字母};
-------
汉字有各种编码,GB,BIG5,GBK, GB18030, 对应 的 unicode big endian, unicode little endian,
UTF-8,UTF-16 等。 UTF-8 可能是 1 byte, 2bytes, 3bytes, ...
所以 没有办法简单 地 帮你解决问题。
搞清自己输入的编码,再想对策。
---
纯GB2312原码,用 双字节 ,每个字节编码 都大于 0xa0 判断。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询