在QT环境下:一个存放有汉字和英文的字符串的char型数组,怎么判断指定的位置的字节是英文还是汉字?

在QT环境下:一个存放有汉字和英文的字符串的char型数组,怎么判断指定的位置的字节是英文还是汉字?并且,是汉字的前半部分还是后半部分?我可以提供一个VC环境下函数参考一... 在QT环境下:一个存放有汉字和英文的字符串的char型数组,怎么判断指定的位置的字节是英文还是汉字?并且,是汉字的前半部分还是后半部分?

我可以提供一个VC环境下函数参考一下:

#include<iostream>
#include <Windows.h>
using namespace std;
#include <mbstring.h>

int isLeadbyte(char *text,int pos) //返回0表示英文,返回1表示是汉字的前半部分,返回2表示汉字的后半部分
{
int i = 0;
int len = lstrlen(text);
if(pos>=len) return 0;
unsigned char bt = static_cast<unsigned char>(text[pos]);
if(bt & 0x80) //如果是汉字
{
while( (i<len) && (i<=pos) )
{
if(i == pos) //前半部分
return 1;
unsigned char bt = static_cast<unsigned char>(text[i]);
if(IsDBCSLeadByte(bt))
{
i += 2;
}
else
{
i++;
}
}
return 2; //后半部分
}
else //英文
{
return 0;
}
}

void main()
{

char * text = "张sdf曾dsfdsf等级";
int pos;

while(1)
{
cout <<"字符串:"<< text << endl << "请输入位置(从0开始):";
cin >>pos;
int len = lstrlen(text);
if(pos >= lstrlen(text))
{
break;
}
int ret=isLeadbyte(text,pos);
if(ret==0)
cout << "英文字符" <<endl<<endl;
else if(ret==1)
cout << "汉字前半部分" <<endl<<endl;
else if(ret==2)
cout << "汉字后半部分" <<endl<<endl;
}
}
中间那段代码:
.......
return 1;
unsigned char bt = static_cast<unsigned char>(text[i]);
if(IsDBCSLeadByte(bt))
......
改为
......
return 1;
unsigned char bt2 = static_cast<unsigned char>(text[i]);
if(IsDBCSLeadByte(bt2))
......
展开
 我来答
来自海印寺芳香袭人&#x00A0;的啄木鸟
2011-10-28 · TA获得超过2439个赞
知道小有建树答主
回答量:501
采纳率:0%
帮助的人:443万
展开全部
QT就是在c++的环境下写的,支持c++代码
QString 和std:string 和char *都是可以互相转化的,你用vc能实现在QT中一样的啊
追问
IsDBCSLeadByte是VC里面的一个函数,不知道怎么实现
追答
那就是库的问题了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
1398049398
2011-11-02
知道答主
回答量:8
采纳率:0%
帮助的人:4.1万
展开全部
baicbaiucaI*8779a8cac a ncpcd
vfjvd84rowt0wtfd/ppskvjjfuq9uuqf0f0uf0092346
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式