利用UTF8来限制用户注册名称字数限制

这篇博客讲述了在C++中如何利用UTF8编码计算用户注册名称的汉字数量,以适应不同平台的需求。在Windows环境下,初始使用IsDBCSLeadByte函数,但在Android上不适用,因此改用Utf_8的utf8_chsize方法来识别和计数汉字。代码示例展示了如何遍历UTF8字符串并计算字数,同时邀请读者分享更优解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开始的时候用的是windows的API,代码如下:

string strName = this->m_inputBox->getUserInputStr();
int strSize = strName.size();
//字符计数器
int countWord = 0;
//计算玩家输入名称的字数
for (int i = 0; i < strSize;i++)
{
//判断是汉字还是数字或字母
if (IsDBCSLeadByte(strName.at(i)))
{
countWord++;
i+=2;
}
countWord++;
}
//判断玩家输入名称内容长短
if (countWord < 4 || countWord > 12)
{
this->m_pNameErrLabel->setVisible(true);
this->m_pNameErrLabel->setStringByID(9736);
this->m_bIsCanSetRoleName = false;
return;
}else
{
this->m_pNameErrLabel->setVisible(false);
this->m_bIsCanSetRoleName = true;
}
}

这段代码在windows环境下运行是没有问题的,但是后来在安卓运行时发现IsDBCSLeadByte并不被识别,所以只好用了Utf_8的方法:

string strInput = this->m_inputBox->getUserInputStr();
int strSize = strInput.size();
int countWord = 0;
for (int i = 0; i < strSize;)
{
int nsize = str::
utf8_chsize(&strInput[i]);
if (nsize == 3)//汉字
{
i+=3;
countWord+=2;
}
else
{
i++;
countWord++;
}
}

在这里用到了utf8_chsize,感兴趣的同学可以好好研究一下,它的返回值根据传入的类型返回的数值是不一样的,用的时候要仔细。如果有其它更好的方法处理该类问题,欢迎大家多提宝贵想法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值