常见的VC获取字符串长度的方法
字符串的长度通常是指字符串中包含字符的数目,但有的时候人们需要的是字符串所占字节的数目。常见的获取字符串长度的方法包括如下几种。后面有源码和最终效果图
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获取字符串长度的方法的更多相关文章
- Swift3.0语言教程获取字符串长度
Swift3.0语言教程获取字符串长度 Swift3.0语言教程获取字符串长度,当在一个字符串中存在很多的字符时,如果想要计算字符串的长度时相当麻烦的一件事情,在NSString中可以使用length ...
- linux shell脚本编程笔记(四): 获取字符串长度的七种方法
获取字符串长度的七种方法 1. \${#str} 2.awk的length 备注:1) 最好用{}来放置变量2) 也可以用length($0)来统计文件中每行的长度 3.awk的NF 备注: -F为分 ...
- (转)Shell中获取字符串长度的七种方法
Shell中获取字符串长度的七种方法 原文:http://blog.csdn.net/jerry_1126/article/details/51835119 求字符串操作在shell脚本中很常用,下面 ...
- golang中获取字符串长度的几种方法
一.获取字符串长度的几种方法 - 使用 bytes.Count() 统计 - 使用 strings.Count() 统计 - 将字符串转换为 []rune 后调用 len 函数进行统计 ...
- Shell获取字符串长度的多种方法总结
摘自:https://www.jb51.net/article/121290.htm 前言 我们在日常工作中,对于求字符串操作在shell脚本中很常用,实现的方法有很多种,下面就来给大家归纳.汇总了求 ...
- shell获取字符串长度
方法1: 使用wc -L命令 wc -L可以获取到当前行的长度,因此对于单独行的字符串可以用这个简单的方法获取,另外wc -l则是获取当前字符串内容的行数. 代码如下: echo "abc& ...
- [No0000A4]DOS命令(cmd)批处理:替换字符串、截取字符串、扩充字符串、获取字符串长度
1.替换字符串,即将某一字符串中的特定字符或字符串替换为给定的字符串.举例说明其功能:========================================= @echo off set a ...
- php获取数组长度的方法(有实例)
php获取数组长度的方法,php为我们提供了两个函数可以计算一维数组长度,如count,sizeof都可以直接统计数组长度,还有获取二维数组的方法. 在php中获取数组长度方法很简单,php为我们提供 ...
- oracle获取字符串长度函数length()和hengthb()
原文:oracle获取字符串长度函数length()和hengthb() lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算s ...
随机推荐
- Android中Scrollview、ViewPager冲突问题汇总(已解决)
显示问题: 1.设置ScrollView的fillViewPort为true 2.设置ViewPager的layout_height为一个固定高度,比如:100dip 冲突问题: 不过ViewPage ...
- TCP/IP ---封装与分用
封装 当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络.其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如图1 - 7所示 ...
- SpringCloud系列七:使用Ribbon实现客户端侧负载均衡
1. 回顾 在前面,已经实现了微服务的注册与发现.启动各个微服务时,Eureka Client会把自己的网络信息注册到Eureka Server上. 但是,在生成环境中,各个微服务都会部署多个实例,因 ...
- 调整Redmine的用户显示格式
在 Redmine 中新建用户时是酱紫的: 必须指定姓氏.名字.然后 Redmine 默认是按"名字 姓氏"这样的方式显示用户.比方"张三",会显示成" ...
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
atitit.人脸识别的应用场景and使用最佳实践 java .net php 1. 人脸识别的应用场景1 2. 标准化的api1 3. 框架选型 JNI2OpenCV.dll and JavaCV ...
- Sql语句查询XML - 小结
--两种方式查询 DECLARE @varXML XML, @varXML1 XML --.xml数据源为属性方式 SET @varXML = '<PARAM> <Row FID = ...
- YUV格式详细解释与FFMPEG的关系
YUV主要的采样格式 主要的采样格式有YCbCr 4:2:0.YCbCr 4:2:2.YCbCr 4:1:1和 YCbCr 4:4:4.其中YCbCr 4:1:1 比较常用,其含义为:每个点保存一个 ...
- c++ why can't class template hide its implementation in cpp file?
类似的问题还有: why can't class template use Handle Class Pattern to hide its implementation? || why there ...
- iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】
iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...
- centos6 找不到 phpize
安装php-devel yum install php-devel.i686