在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))
...... 展开
我可以提供一个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))
...... 展开
2个回答
展开全部
QT就是在c++的环境下写的,支持c++代码
QString 和std:string 和char *都是可以互相转化的,你用vc能实现在QT中一样的啊
QString 和std:string 和char *都是可以互相转化的,你用vc能实现在QT中一样的啊
追问
IsDBCSLeadByte是VC里面的一个函数,不知道怎么实现
追答
那就是库的问题了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询