字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。

1.使用sizeof获取字符串长度sizeof的含义很明确,它用以获取字符数组的字节数(当然包括结束符“0)。对于ANSI字符串和UNICODE字符串,形式如下:

sizeof(cs)/sizeof(char)

sizeof(ws)/sizeof(wchar_t)

可以采用类似的方式,获取到其字符的数目。如果遇到MBCS,如"中文ABC",很显然,这种办法就无法奏效了,因为sizeof()并不知道哪个char是半个字符。

2.使用strlen()获取字符串长度strlen()及wcslen()是标准C++定义的函数,它们分别获取ASCII字符串及宽字符串的长度,如:

size_t strlen( const char *string );

size_t wcslen( const wchar_t *string );

strlen()与wcslen()采取“0作为字符串的结束符,并返回不包括“0在内的字符数目。

3.使用CString::GetLength()获取字符串长度CStringT继承于CSimpleStringT类,该类具有函数:

int GetLength( ) const throw( );

GetLength()返回字符而非字节的数目。比如:CStringW中,"中文ABC"的GetLength()会返回5,而非10。那么对于 MBCS呢?同样,它也只能将一个字节当做一个字符,CStringA表示的"中文ABC"的GetLength()则会返回7。

4.使用std::string::size()获取字符串长度

basic_string同样具有获取大小的函数

size_type length( ) const;

size_type size( ) const;

length()和size()的功能完全一样,它们仅仅返回字符而非字节的个数。如果遇到MCBS,它的表现和CStringA::GetLength()一样。

5.使用_bstr_t::length()获取字符串长度_bstr_t类的length()方法也许是获取字符数目的最佳方案,严格意义来讲,_bstr_t还称不上一个完善的字符串类,它主要提供了对BSTR类型的封装,基本上没几个字符串操作的函数。不过,_bstr_t 提供了length()函数:

unsigned int length ( ) const throw( );

该函数返回字符的数目。值得称道的是,对于MBCS字符串,它会返回真正的字符数目。

现在动手

编写如下程序,体验获取字符串长度的各种方法。

【程序4-8】各种获取字符串长度的方法

01  #include "stdafx.h"

02 #include "string"

03  #include "comutil.h" 04  #pragma comment( lib, "comsuppw.lib" )

05

06 using namespace std;

07

08 int main()

09 {

10 char s1[] = "中文ABC";

11 wchar_t s2[] = L"中文ABC";

12

13 //使用sizeof获取字符串长度

14    printf("sizeof s1: %d“r“n", sizeof(s1)); 15    printf("sizeof s2: %d“r“n", sizeof(s2));

16

17 //使用strlen获取字符串长度

18    printf("strlen(s1): %d“r“n", strlen(s1)); 19    printf("wcslen(s2): %d“r“n", wcslen(s2));

20

21 //使用CString::GetLength()获取字符串长度

22 CStringA sa = s1;

23 CStringW sw = s2;

24

计算机符串长度的函数,常用字符串长度计算函数相关推荐

  1. java中索引超出怎么办_Java-字符串索引超出范围异常“字符串索引超出范围”

    我是新来的java,并通过询问我确信什么是愚蠢的问题来咬牙切齿.我创建了一些方法,只是简单地打电话给他们.主要方法中的while循环出现错误.编译器说"线程主java.lang.String ...

  2. TIA博途WINCC的触摸屏VB脚本入门(Len函数获取字符串长度以及Right和Left函数)

    TIA博途WINCC的触摸屏VB脚本入门(Len函数获取字符串长度以及Right和Left函数) 首先,建立一个项目,并添加一个HMI,入下图所示,新建一个HMI变量表,添加如下几个HMI内部变量, ...

  3. c语言中字母的长度是,c语言字符串长度怎么算

    本文收集整理关于c语言字符串长度怎么算的相关议题,使用内容导航快速到达. 内容导航: Q1:c语言计算字符串的长度(用指针) 12345678910111213141516171819#include ...

  4. C++常用字符串长度计算函数

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

  5. mysql中字符串拼接函数_MySQL 字符串连接CONCAT()函数

    MySQL字符串连接函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符 ...

  6. python字符串的内置函数_python——字符串内置函数

    当字符串本身就含有\n之类的,可以用转义符.行显示(在字符串引号前面加r).repr(str)三种方法. 字符串内置方法 字符串内置方法: 1. capitalize(...) S.capitaliz ...

  7. php中的替换函数,php字符串中替换函数是什么

    php字符串中替换函数有两种,分别是:1.substr_replace函数,用于把字符串的一部分替换为另一个字符串:2.str_replace函数,能够使用一个字符串替换字符串中的另一些字符. 本文操 ...

  8. python关于字符串的内置函数_Python 字符串内置函数(二)

    # 2.格式化相关 # ljust(width) 函数 获取固定长度,左对齐,右边不够用空格补齐 # rjust(width) 函数 获取固定长度,右对齐,左边不够用空格补齐 # center(wid ...

  9. python uppercase函数_字符串-短rot13函数-Python

    字符串-短rot13函数-Python 我正在Python中寻找一个简短而又酷的rot13函数;-)我已经写了这个函数: def rot13(s): chars = "abcdefghijk ...

  10. c++语言获得字符长度,c++怎么获取字符串长度?

    C++获取字符串长度 strlen()函数 函数 strlen()是一个常规函数,他接受一个 C-风格字符串作为参数,并返回字符串包含的字符数. 参数必须是字符型指针(char*).当数组名作为参数传 ...

最新文章

  1. C# Task的用法
  2. 智能循迹小车_智能机器人之循迹小车——循迹原理
  3. 操作系统(三十六)动态分区分配算法
  4. C# HttpWebRequest提交数据方式
  5. python2与python3共存_【python】--python2与python3 共存
  6. 北斗有 35 颗卫星,而 GPS 有 24 颗卫星,为什么二者数量不同?
  7. (回溯4)部分全排列
  8. java xml amp_Javaamp;Xml教程(十一)JAXB实现XML与Java对象转换
  9. /bin/false /sbin/nologin
  10. linux操作系统基础与实训教程,清华大学出版社-图书详情-《Linux操作系统基础与实训教程》...
  11. 本周ASP.NET英文技术文章推荐[03/04 - 03/10]
  12. sas rename重命名_如何使用sp_rename命令在SQL Server中重命名表
  13. CentOS的 ifconfig/mail/traceroute命令不存在
  14. unity animator 动画 结束后保持位移_Unity动画系统详解9:Target Matching是什么?
  15. 安卓端gis_通图采集手机版(GIS数据采集软件)V1.31 安卓版
  16. caffee学习——图像切割
  17. 输入输出工具技术(ITTO)要背吗?——软考高项笔记8
  18. 位、字符、字节、有什么区别
  19. 苹果手机配对手表总是显示服务器,苹果手表配对失败,为什么iwatch跟手机总是配对...
  20. ExecutorCompletionService

热门文章

  1. 基于Vision Transformer的视频哈希检索识别虚假视频
  2. 基于MATLAB 的X-CT图像重建计算机仿真实验研究实验
  3. C#程序设计--控制台程序输出上下三角形和菱形
  4. 体温枪PCBA设计生产流程
  5. 【高等数学】高阶偏导数与隐函数的高阶偏导数的深度辨析
  6. VMware虚拟机安装黑苹果
  7. 黑苹果系统--Parallels Desktop虚拟机使用
  8. 2019年5月个人总结:大家都在跨界,原谅自己的懈怠
  9. Java精进-20分钟学会mybatis使用
  10. 服务器是如何被入侵的