C++库函数有没有求字符串字符长度的函数?不是strlen。

pgmsoul 2009-10-15 05:31:32
strlen返回的是字符串的字节长度,以往都是转换成uincode在处理,今天突然想起,C++不会没有这么个函数吧。
...全文
3986 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellojjq 2011-11-02
  • 打赏
  • 举报
回复
恩恩 长知识····
pgmsoul 2009-10-18
  • 打赏
  • 举报
回复
楼上我说了,string类返回的不是字符个数。20楼正解,那个_mbslen要用到本地信息,也就是说不同的语言,算法是不一样的。

实际上最安全的做法还是转换正unicode,这个我知道。

我就是想问,到底C++库里面有没有这么个函数,因为语言不同,实现起来肯定也不同,所以我说没有。但是mbstring.h还确实有这个函数,只是实现起来比较复杂,而且依赖语言设置,如果要统计不同的语言,还是不行,所以转换成unicode更好。

我问这个问题,并不是是要找个方法,_mbslen我也不会用它,我只是问问。
oyster2008 2009-10-17
  • 打赏
  • 举报
回复
windows系统下可以使用_mbslen函数

#include <stdio.h>
#include <mbstring.h>

int main(void)
{
const char*p="abc中国";
int n=_mbslen((unsigned char*)p);
printf("%d\n",n);
}


输出是5
loveour 2009-10-17
  • 打赏
  • 举报
回复
string可以处理中文,基于char,每个汉字占两个字节,算两个字符,长度计算按照字节算。wstring基于wchar_t,每个汉字还是占两个字节,但是只算一个字符。所以,string保存“世界你好”倒序输出是乱的,wstring保存“世界你好”倒序输出是“好你界世”
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;
typedef basic_string<char, char_traits<char>, allocator<char> > string;
其实都是basic_string
yang_e_2009 2009-10-17
  • 打赏
  • 举报
回复
windows API 里有

MultiByteToWideChar 用来将多字节字符串转换为unicode, 也可以用来计算字符串长度

























lililililililili 2009-10-17
  • 打赏
  • 举报
回复
在c++的标准模板库STL里有String,用String.length();
arong1234 2009-10-17
  • 打赏
  • 举报
回复
没听说有MCBS版本的能统计字符个数的函数
yangyunzhao 2009-10-17
  • 打赏
  • 举报
回复
在C++里面,如果你使用的旧式C风格字符串,那么就用strlen好了啊。
如果使用新式C++标准字符串string,那么就用
#include <string>
using std::string;

string x = "abcd";
int len = x.length(); //字符长度
int capacity = x.capacity;//当前容量
liudanking 2009-10-16
  • 打赏
  • 举报
回复
wchar_t *str = L"a啊";
int len = wcslen(str);
大家和谐呵。讨论问题重要……
pgmsoul 2009-10-16
  • 打赏
  • 举报
回复
不够,是你没明白。如果你语文及格的话,把我所有的帖子看下。

如果你还不明白,我告诉,我要的一个多字节字串(不转换成unicode)含有多少个字符。一般来说,我们说的多字节字串(汉语),是1个字节和2字节的,但是不止这些,有些字符含更多的字节。

我知道为什么没有这么个函数了,呵呵。
jackyjkchen 2009-10-15
  • 打赏
  • 举报
回复
wchar_t *str = L"a啊";
int len = wcslen(str);

len为2,够明白么
jackyjkchen 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 pgmsoul 的回复:]
从效率的角度,实际上把多字节处理成wide char 更效率高。看来真的没有那个函数。实际我不是已经写了一个吗,实现并不复杂,我只是觉得库函数会有这样一个现成的函数。
[/Quote]
既然要处理wchar_t,都跟你说了多少遍wcslen!
pgmsoul 2009-10-15
  • 打赏
  • 举报
回复
从效率的角度,实际上把多字节处理成wide char 更效率高。看来真的没有那个函数。实际我不是已经写了一个吗,实现并不复杂,我只是觉得库函数会有这样一个现成的函数。
lihan6415151528 2009-10-15
  • 打赏
  • 举报
回复
自己实现一个吧
pgmsoul 2009-10-15
  • 打赏
  • 举报
回复
str = “a啊”;
字符长度是2,不是3,就这么简单,可能教科书上说字符长度就是字节长度,但是显然,字符长度,是字串字符个数。
实际上多字节字符串并不是char型数组,既然是多字节,就是字符可能占用多个字节。char型数组等同与多字节字符串只是一种不严格说法。
chengzhe 2009-10-15
  • 打赏
  • 举报
回复
不明白楼主到底要干什么 wstring string strlen wcslen 还想要什么呀
jackyjkchen 2009-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 pgmsoul 的回复:]
string的length返回的也是字节长度,不是字符长度。
[/Quote]
char类型字节长度不就是字符长度么?
你到底是不是处理宽字符,处理宽字符用wcslen。

pgmsoul 2009-10-15
  • 打赏
  • 举报
回复
string的length返回的也是字节长度,不是字符长度。
pgmsoul 2009-10-15
  • 打赏
  • 举报
回复
没有吗?
fox000002 2009-10-15
  • 打赏
  • 举报
回复
C++ 没有修改 C 字符串相关的函数,直接继承下来了

所以就是 strlen
加载更多回复(3)

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧