计算字符串长度函数大全

2023-11-05

字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是 字符串所占字节的数目。
常见的获取字符串长度的方法包括如下几种。
1.使用sizeof获取字符串长度
sizeof的含义很明确,它用以获取 字符数组的字节数(当然包括结束符\0)。对于ANSI字符串和UNICODE字符串,形式如下:
 
 
  1. sizeof(cs)/sizeof(char)  
  2. sizeof(ws)/sizeof(wchar_t
可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。
2.使用strlen()获取字符串长度
strlen()及wcslen()是标准C++定义的函数,它们分别获取ASCII字符串及宽字符串的长度,如:
 
 
  1. size_t strlen( const char *string );  
  2. size_t wcslen( const wchar_t *string ); 
strlen()与wcslen()采取\0作为字符串的结束符,并返回不包括\0在内的字符数目。
3.使用CString::GetLength()获取字符串长度
CStringT继承于CSimpleStringT类,该类具有函数:
 
 
  1. int GetLength( ) const throw( ); 
GetLength()返回 字符而非字节的数目。比如:CStringW中,"中文ABC"的GetLength()会返回5,而非10。那么对于MBCS呢?同样,它也只能将一个字节当做一个字符,CStringA表示的"中文ABC"的GetLength()则会返回7。
4.使用std::string::size()获取字符串长度
basic_string同样具有获取大小的函数:
 
 
  1. size_type length( ) const;  
  2. size_type size( ) const
length()和size()的功能完全一样,它们仅仅返回 字符而非字节的个 数。如果遇到MCBS,它的表现和CStringA::GetLength()一样。
5.使用_bstr_t::length()获取字符串长度
_bstr_t类的length()方法也许是获取字符数目的最佳方案,严格意义来讲,_bstr_t还称不上一个完善的字符串类,它主要提供了对BSTR类型的封装,基本上没几个字符串操作的函数。不过,_bstr_t 提供了length()函数:
 
 
  1. unsigned int length ( ) const throw( );  
该函数返回字符的数目。值得称道的是,对于MBCS字符串,它会返回真正的字符数目。
现在动手
编写如下程序,体验获取字符串长度的各种方法。
【程序 4-8】各种获取字符串长度的方法
 
 
  1. 01  #include "stdafx.h" 
  2. 02  #include "string" 
  3. 03  #include "comutil.h" 
  4. 04  #pragma comment( lib, "comsuppw.lib" )  
  5. 05    
  6. 06  using namespace std;  
  7. 07    
  8. 08  int main()  
  9. 09  {  
  10. 10      char s1[] = "中文ABC";  
  11. 11      wchar_t s2[] = L"中文ABC";  
  12. 12    
  13. 13      //使用sizeof获取字符串长度  
  14. 14      printf("sizeof s1: %d\r\n"sizeof(s1));  
  15. 15      printf("sizeof s2: %d\r\n"sizeof(s2));  
  16. 16    
  17. 17      //使用strlen获取字符串长度  
  18. 18      printf("strlen(s1): %d\r\n", strlen(s1));  
  19. 19      printf("wcslen(s2): %d\r\n", wcslen(s2));  
  20. 20    
  21. 21      //使用CString::GetLength()获取字符串长度  
  22. 22      CStringA sa = s1;  
  23. 23      CStringW sw = s2;  
  24. 24    
  25. 25      printf("sa.GetLength(): %d\r\n", sa.GetLength());  
  26. 26      printf("sw.GetLength(): %d\r\n", sw.GetLength());  
  27. 27    
  28. 28      //使用string::size()获取字符串长度  
  29. 29      string ss1 = s1;  
  30. 30      wstring ss2 = s2;  
  31. 31    
  32. 32      printf("ss1.size(): %d\r\n", ss1.size());  
  33. 33      printf("ss2.size(): %d\r\n", ss2.size());  
  34. 34    
  35. 35      //使用_bstr_t::length()获取字符串长度  
  36. 36      _bstr_t bs1(s1);  
  37. 37      _bstr_t bs2(s2);  
  38. 38    
  39. 39      printf("bs1.length(): %d\r\n", bs1.length());  
  40. 40      printf("bs2.length(): %d\r\n", bs2.length());  
  41. 41    
  42. 42      return 0;
  43. 43 } 
输出结果:
sizeof   s1:  8
sizeof   s2:  12
strlen(s1):  7
wcslen(s2):  5
sa.GetLength():  7
sw.GetLength():  5
ss1.size():  7
ss2.size():  5
bs1.length():  5
bs2.length():  5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算字符串长度函数大全 的相关文章

随机推荐

  • unity踩坑记录

    1 Unity ScriptableObject生成的asset文件 关闭unity时数据丢失 需要先setdirty EditorUtility SetDirty obj AssetDatabase SaveAssets 同时 保证Scr
  • 如何生成SSH key

    第一步 检查本机是否存在 SSH key 如下图调出Git Bash 窗口 输入下面的命令 ls al ssh 如果有文件id rsa pub 或 id dsa pub 则直接进入步骤3将SSH key添加到GitHub中 否则进入第二步生
  • 龙招港2021高考成绩查询,龙招港黑龙江招生考试信息港2021黑龙江高考志愿填报系统入口...

    龙招港黑龙江招生考试信息港2021黑龙江高考志愿填报系统入口 龙招港黑龙江招生网http www lzk hl cn 是2021黑龙江高考志愿填报官方网站 黑龙江龙招港提供2021黑龙江高考一本二本专科志愿填报系统 2021黑龙江高考各批次
  • 2021年机械、航空航天与汽车工程国际会议(CMAAE)检索通知

    2021年机械 航空航天与汽车工程国际会议 CMAAE 2021 会议已检索
  • 【FreeRTOS】多任务创建

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • 蓝桥杯JAVA-28.前缀和与差分详解

    个人博客 www tothefor com 蓝桥杯复习知识点汇总 目录 开始之前 推荐先看一下总结 再看内容 也许会帮你更好的理解 前缀和是指某序列的前n项和 可以把它理解为数学上的数列的前n项和 而差分可以看成前缀和的逆运算 合理的使用前
  • Mybatis最全笔记--今日分享(参考狂神说)

    一 CRUD Mybatis 1 namespace namespace中的包名要和Dao Mapper接口的包名一致 2 select 选择 查询语句 id 就是对应的namespace中的方法名 resultType sql语句执行的返
  • Nginx基本配置(中级)

    文章目录 一 nginx反向代理 1 什么是反向代理 2 nginx代理配置 二 nginx负载均衡 三 nginx缓存 四 nginx优化 1 worker processes 2 worker connections 3 worker
  • 5 分钟让你明白 “软链接” 和“硬链接”的区别

    今天在知乎上看到一篇十分有趣的问题 如何评价微软高级工程师痴迷于soft link这一linux常见概念 虽然又是知名撕逼王曾某的撕逼帖 但是我还是想就题目中链接的问题简单地讲讲 什么是链接 链接简单说实际上是一种文件共享的方式 是 POS
  • 【numpy学习笔记】数组的存储和下载

    1 Saving array in binary format npy gt gt gt a np array 1 2 3 4 5 gt gt gt np save array a a gt gt gt np load array a np
  • 基于单片机的温室大棚环境监测系统设计

    温室大棚对北方反季节蔬菜的种植具有重要意义 据了解全国各地温室大棚使用集中 但是大棚环境调控方式落后 管理落后 生产效率比较低 针对此问题本文提出了一种基于STM32单片机智能温室大棚控制系统方案 实现环境参数的自动检测 以达到智能化 自动
  • EFilm 4.1

    EFilm 4 1 安装文件 Keygen 第一部分 http download csdn net detail crazpro 9696491 第二部分 http download csdn net detail crazpro 9696
  • HTML+CSS+JS制作一个简单的计算器

    用HTML CSS JS制作了一个简单的计算器 它的使用类似于生活中使用的计算器 暂时未发现有任何计算上的错误 有问题请联系我 谢谢 最终成果图 HTML代码块
  • Linux命令笔记

    文章目录 目录操作 1 只读文件改为可编辑 2 修改目录的所属 文件操作 1 查找文件关键字 2 撤销操作 3 解压和打包文件 4 修改文件名 5 复制文件 修改用户操作 1 添加一个用户 2 切换用户 网络命令 1 查看端口占用 2 通过
  • js中viod运算符总结

    目录 写在前面 常用语法 官方定义 常见用法 简单介绍 写在前面 简单来说 void运算符用于对给定的表达式进行求值 然后返回 undefined 该运算符通常用于避免输出不应该输出的值 常用语法 void expression 官方定义
  • vue不用iframe用什么代替_vue项目如何内嵌如iframe页面

    父页面 接收传来的页面即子页面 在vue页面中 created window addEventListener message this receiveMessageFromIframePage false receiveMessageFr
  • linux安装Mysql5.7

    在liunx安装mysql 在网上找教程 都是说的太笼统 比如我照着教程安装一半 出现了和教程上面不一致的问题 没有经验的同学就会不知道下面该怎么进行了 如果同学照着我的步骤来 一般是不会出现这种问题的 看完文章如有收获 还请给个赞 一 安
  • HTML,CSS,Javascript和DOM的关系

    HTML最先出现 一开始只是规定了版面的内容 如 div p p h1 等 有颜色 字体等方面的设置 后来才添加的这些标签 CSS 颜色 字体等html标签设置的样式很麻烦 难以修改 于是人们提出CSS来代替这些标签 DOM 一组API 用
  • VCSEL激光二极管驱动

    1 VCSEL的P I特性 激光二极管的出射光功率P与注入电流I的关系曲线称为P I曲线 注入电流小于阈值电流Ith时 激光器的输出功率P很小 为自发辐射的荧光 荧光的输出功率随注入电流的增加而缓慢增加 注入电流大于Ith时 输出功率P随注
  • 计算字符串长度函数大全

    字符串的长度通常是指字符串中包含字符的数目 但有的时候人们需要的是 字符串所占字节的数目 常见的获取字符串长度的方法包括如下几种 1 使用sizeof获取字符串长度 sizeof的含义很明确 它用以获取 字符数组的字节数 当然包括结束符 0