文档章节

文字长度判断,汉字,字母,数字,图片都算作一个长度单位

徐学良
 徐学良
发布于 2015/05/22 10:40
字数 290
阅读 23
收藏 0
const int MAX_CHAT_LENGTH = 10;
 
std::string utf8_to_gbk(const char *utf8)
{
 int len = MultiByteToWideChar(CP_UTF8, 0, utf8, -1, NULL, 0);
 std::shared_ptr<wchar_t> wstr(new wchar_t[len + 1]);
 memset(wstr.get(), 0x00, sizeof(wchar_t) * (len + 1));
 MultiByteToWideChar(CP_UTF8, 0, utf8, -1, wstr.get(), len);
 len = WideCharToMultiByte(CP_ACP, 0, wstr.get(), -1, NULL, 0, NULL, NULL);
 std::shared_ptr<char> str(new char[len + 1]);
 memset(str.get(), 0x00, sizeof(char) * (len + 1));
 WideCharToMultiByte(CP_ACP, 0, wstr.get(), -1, str.get(), len, NULL, NULL);
 return str.get(); 
}

std::wstring string_to_wstring(const std::string& s)
{
 _bstr_t t = s.c_str();
 wchar_t* pwchar = (wchar_t*)t;
 std::wstring result = pwchar;
 return result;
}

  
int string_len(std::string utf8_str)
{
 if(utf8_str.size() > 0)
 {
  char buf[1024] = {0};
  char dest_buf[2] = {0};
  memset(buf, 0, 1024);
  memset(dest_buf, 0, 2);
  strcpy(buf, utf8_str.c_str());
  std::string convert_str;
  bool convert_flag = true;
  bool begin = false;
  int count = 0;
  for(int i = 0; i < strlen(buf); ++i)
  {
   if(buf[i] == '<' && buf[i+1] == 'i' && buf[i+2] == 'm' && buf[i+3] == 'a' && buf[i+4] == 'g' && buf[i+5] == 'e' && buf[i+6] == 's' && buf[i+7] == '>')
   {
    convert_flag = false;
   }
   if(convert_flag == false && buf[i] == '<' && buf[i+1] == '/' && buf[i+2] == 'i' && buf[i+3] == 'm' && buf[i+4] == 'a' && buf[i+5] == 'g' && buf[i+6] == 'e' && buf[i+7] == 's' && buf[i+8] == '>')
   {
    begin = true;
   }
   if(begin && buf[i] == '>')
   {
    convert_flag = true;
    begin = false;
    ++count;
   }
   if(count > 5)
   {
    return MAX_CHAT_LENGTH + 1;
   }
   if(convert_flag)
   {
    dest_buf[0] = buf[i];
    convert_str = convert_str + dest_buf;
    memset(dest_buf, 0, 2);
   }
  }
  std::string gbk_str = utf8_to_gbk(convert_str.c_str());
  std::wstring ws_str = string_to_wstring(gbk_str.c_str());
  return ws_str.size();
 }
 else
 {
  return MAX_CHAT_LENGTH + 1;
 }
 
}

© 著作权归作者所有

徐学良
粉丝 24
博文 213
码字总数 13841
作品 0
浦东
程序员
私信 提问
注册用户名字符长度判断细节

$username = '刷单8元1单淘宝客服20元1小时我Q125556733jff'; vardump(strlen($username)); vardump(LibraryCommon::username_patten($username)); 一、使用strlen来判断长度 里面的一个汉字......

wangtaotao
2015/06/22
0
0
有谁可以提供一下图片解析汉字/数字的思路

图片解析成汉字,数字,英文字母的思路 假如用照相机拍了一页书,文字基本上是宋体字,里面有汉字,数字,英文字母,但是文字的方向不保证是水平的,因为是相机拍摄的.现在需要把文字解析到word里面去...

徐迎龙
2013/08/08
258
2
letter-spacing和word-spacing区别有哪些

一、CSS中word-spacing属性 1、检索或设置对象中的单词之间插入的空格数。由浮点数字和单位标识符组成的长度值,允许为负值。 2、默认值为 normal,等同于设置为0 3、CSS把“字(word)”定义...

学习也休闲
2015/09/16
19
0
OCR技术浅探 : 文字定位和文本切割(2)

文字定位 经过前面的特征提取,我们已经较好地提取了图像的文本特征,下面进行文字定位。 主要过程分两步: 1、邻近搜索,目的是圈出单行文字; 2、文本切割,目的是将单行文本切割为单字。 ...

iamdll
2018/01/31
0
0
Android 浅谈 maxEms 属性

小菜最近调整一个小需求,为了整体显示效果,需要限制一部分文字的长度,超过部分以...代替。 小菜本想偷个懒,用 android:maxLength="6" 属性配合 android:maxLines="1" 以及 android:elli...

阿策神奇
2018/05/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在做 Taro 适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 解决跨域问题 h5 发请求会报跨域问题,需...

dkvirus
55分钟前
3
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部