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

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. Android 之UI自适应解决方式

    1.概况 作为Android开发者,最头疼的莫过于让自己开发的程序在不同终端上面的显示效果看起来尽量一致(当然.假设要充分利用大屏幕的优势另当别论).在全球范围内来讲.android有着数以亿计的设备 ...

  2. ftp mybatis

    c# 字符串和Ascii码转换http://www.cnblogs.com/JoshuaDreaming/archive/2010/11/19/1882068.html ftp 公式 http://w ...

  3. spring揭秘读书笔记----ioc的基本概念

    在看ico概念之前,先想一下我们平常需要依赖某个类时会怎么做? 无非是在要用到的地方写如下代码: Person person = new Person(); //然后就可以用person对象来获取Pe ...

  4. ucos-ii变量名称表

  5. centos下nginx启动脚本和chkconfig管理

    在安装完nginx后,重新启动需要“kill -HUP nginx进程编号”来进行重新加载,显然十分不方便.如果能像apache一样,直接通过脚本进行管理就方便多了. nginx官方早就想好了,也提供 ...

  6. android studio- Gradle "xxx" project refresh failed

    Android Studio每次更新版本都会更新Gradle这个插件,但由于长城的问题每次更新都是失败,又是停止在Refreshing Gradle Project ,有时新建项目的时候报 Gradl ...

  7. C++在线编译器

    主要有3个,且它们都支持C++11 http://gcc.godbolt.org/ http://coliru.stacked-crooked.com/ http://ideone.com/ 第一个网 ...

  8. [c#.Net] NUnit Test 体验

    NUit Test Adapter 安装,两种方式 第一种:从扩展和更新里搜索nunit,进行下载安装

  9. 一键保存网页为PDF_V1.2

    福利来了,“一键保存网页为PDF”发布以来最给力的功能来了: 1.支持大部分浏览器了(添加书签方式),测试IE8\IE9.谷歌.火狐可用: 2.转换组件“ephtmltopdf”无水印了,不用注册账号 ...

  10. linux中if[[ $file == r* ]]的空格

    ls $usridir/$line | while read file do if [[ $file==access.log.* ]] then echo $file "hahahah&qu ...