获取字符串 字数

zzw165027967 2012-02-24 02:24:55
我有一个 std::string = "你好123";
有什么办法 能得到它里面的长度 是 5。 也就是说中文也算一个长度。
...全文
140 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaningfan 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 ivers0n 的回复:]
在不同字符集下 汉字不一定占2个字节 这个要注意
[/Quote]
请问下std::string 只支持多字节字符集吧?不支持Unicode的
IVERS0N 2012-02-24
  • 打赏
  • 举报
回复
在不同字符集下 汉字不一定占2个字节 这个要注意
yaningfan 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 zzw165027967 的回复:]
我试了下,是可以的,可是我能问一下,为什么a[i] < 0 就认为是中文了呢?还有这个会有什么特殊情况吗?会不会碰到问题?
[/Quote]
....因为char型是有符号的-128~127。0~127是给ASCII用的,中文的话只能用-128~-1了。
jixiang1983 2012-02-24
  • 打赏
  • 举报
回复
看看UNICODE编码(0-65535),看看中文汉字的编码范围。
SLSnake 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ivers0n 的回复:]

中文的两个字节的ASCII都超过了128 判断下
[/Quote]
这就是原因,超过128了,在内存里看,值就是负的了
特殊情况嘛倒是没想很多,你可以输些特殊的字符进去,直到报错,然后自己跟踪下
zzw165027967 2012-02-24
  • 打赏
  • 举报
回复
我试了下,是可以的,可是我能问一下,为什么a[i] < 0 就认为是中文了呢?还有这个会有什么特殊情况吗?会不会碰到问题?
[Quote=引用 4 楼 slsnake 的回复:]

C/C++ code
int main()
{
string a = "你好123";
int len = 0;
int clen = 0;
printf("%d\n",a.size());
for(int i = 0; i<a.size(); i++)
{
if(a[i]<0)
{
cl……
[/Quote]
IVERS0N 2012-02-24
  • 打赏
  • 举报
回复
中文的两个字节的ASCII都超过了128 判断下
zzw165027967 2012-02-24
  • 打赏
  • 举报
回复
不行啊~ 的出来的还是 7
[Quote=引用 3 楼 ppsharp 的回复:]

strlen()
[/Quote]
SLSnake 2012-02-24
  • 打赏
  • 举报
回复
int main()
{
string a = "你好123";
int len = 0;
int clen = 0;
printf("%d\n",a.size());
for(int i = 0; i<a.size(); i++)
{
if(a[i]<0)
{
clen++;
}
else
{
len++;
}
}
printf("len:%d\n",clen/2 + len);
getch();
return 0;
}


写了段简单的代码,考虑的特殊情况比较少,仅作参考
ppsharp 2012-02-24
  • 打赏
  • 举报
回复
strlen()
zzw165027967 2012-02-24
  • 打赏
  • 举报
回复
在 不设置工程的 前提下,有没有办法啊?
muyi66 2012-02-24
  • 打赏
  • 举报
回复
设置项目文本为UTF的就可以了

64,637

社区成员

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

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