字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。后面有源码和最终效果图

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字符串,它会返回真正的字符数目。

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

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

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

25      printf("sa.GetLength(): %d\r\n", sa.GetLength());

26      printf("sw.GetLength(): %d\r\n", sw.GetLength());

27

28      //使用string::size()获取字符串长度

29      string ss1 = s1;

30      wstring ss2 = s2;

31

32      printf("ss1.size(): %d\r\n", ss1.size());

33      printf("ss2.size(): %d\r\n", ss2.size());

34

35      //使用_bstr_t::length()获取字符串长度

36      _bstr_t bs1(s1);

37      _bstr_t bs2(s2);

38

39      printf("bs1.length(): %d\r\n", bs1.length());

40      printf("bs2.length(): %d\r\n", bs2.length());

41

42   return 0;

43 }

常见的VC获取字符串长度的方法的更多相关文章

  1. Swift3.0语言教程获取字符串长度

    Swift3.0语言教程获取字符串长度 Swift3.0语言教程获取字符串长度,当在一个字符串中存在很多的字符时,如果想要计算字符串的长度时相当麻烦的一件事情,在NSString中可以使用length ...

  2. linux shell脚本编程笔记(四): 获取字符串长度的七种方法

    获取字符串长度的七种方法 1. \${#str} 2.awk的length 备注:1) 最好用{}来放置变量2) 也可以用length($0)来统计文件中每行的长度 3.awk的NF 备注: -F为分 ...

  3. (转)Shell中获取字符串长度的七种方法

    Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...

  4. golang中获取字符串长度的几种方法

    一.获取字符串长度的几种方法   - 使用 bytes.Count() 统计   - 使用 strings.Count() 统计   - 将字符串转换为 []rune 后调用 len 函数进行统计   ...

  5. Shell获取字符串长度的多种方法总结

    摘自:https://www.jb51.net/article/121290.htm 前言 我们在日常工作中,对于求字符串操作在shell脚本中很常用,实现的方法有很多种,下面就来给大家归纳.汇总了求 ...

  6. shell获取字符串长度

    方法1: 使用wc -L命令 wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数. 代码如下: echo "abc& ...

  7. [No0000A4]DOS命令(cmd)批处理:替换字符串、截取字符串、扩充字符串、获取字符串长度

    1.替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串.举例说明其功能:========================================= @echo off set a ...

  8. php获取数组长度的方法(有实例)

    php获取数组长度的方法,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度,还有获取二维数组的方法. 在php中获取数组长度方法很简单,php为我们提供 ...

  9. oracle获取字符串长度函数length()和hengthb()

    原文:oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算s ...

随机推荐

  1. java之生成jar包

    Java编写的application程序是否能够最终形成一个类似于exe一样的可执行文件,难道就只能用命令行运行?------------------------------------------- ...

  2. tcp/ip ---子网寻址

    现在所有的主机都要求支持子网编址( RFC 950 [Mogul and Postel 1985]).不是把I P地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号. ...

  3. sql server 函数--rand() 生成整数的随机数

    rand() 定义: 返回从0到1之间的随机浮点值. 举例说明: select rand() as 随机数   结果如图: select cast( floor(rand()*N) as int )  ...

  4. SpringCloud系列十五:使用Hystrix实现容错

    1. 回顾 上文讲解了容错的重要性,以及容错需要实现的功能. 本文来讲解使用Hystrix实现容错. 2. Hystrix简介 Hystrix是Netflix开源的一个延迟和容错库,用于隔离访问远程系 ...

  5. Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package

    Atitit.软件命名空间  包的命名统计 及命名表(2000个名称) 方案java package 1. 统计的lib jar 列表1 2. Code3 3. 常用包名按找字母排序(2000个)4 ...

  6. python c example2:pylame2

    #include <Python.h> #include <lame.h> //pyton object variables typedef struct{ PyObject_ ...

  7. BAT-使用BAT方法设置IP地址

    ::------以下为批处理文件内容---- @echo off ::set slection1= set/p slection1=请输入IP地址: netsh interface ip set ad ...

  8. C# 子类实例化过程

    刚研究了一下C#子类实例化的过程. 首先我遇到了如下一个问题: 有类A,里面写了一个有参的构造函数,并没有提供默认的无参构造函数.现在类B继承了类A,没有写任何的构造函数. 这时如果想实例化类B就会产 ...

  9. jquery省份城市选择器

    var pro = ["北京","天津","上海","重庆","河北","山西" ...

  10. tcpreplay工具安装使用

    一.Tcpreplay功能简介 首先推荐一个网站:http://tcpreplay.synfin.net/ ,上面有Tcpreplay的安装包和很多文档,包括手册.man页和FAQ等. Tcprepl ...