关于C++字符串逆序输出的问题。

#include"iostream"usingnamespacestd;#include<string>intmain(){stringa;cin>>a;for(inti... #include "iostream"
using namespace std;
#include <string>
int main()
{
string a;
cin >>a;
for(int i=a.size()-1;i>=0;i--)
{
cout<<a[i];
}
return 0;
}
输出结果:
asd
dsa
当我把
for(int i=a.size()-1;i>=0;i--)

中的a.size()换成sizeof()时,输出的结果:
asd
dsa
多了许多空格,这是为什么呢?求大神,另外,这两个的区别我也不是分得特别清楚。。。。
展开
 我来答
_whales
2013-03-28 · TA获得超过2279个赞
知道大有可为答主
回答量:1814
采纳率:85%
帮助的人:505万
展开全部
sizeof()请看string类的实现

应该有一个指针
char *p;
一个引用计数 size_t refcount;
一个长度 size_t len;
一个容量 size_t capacity 或者 capability
这样一个 string 对象;自己的大小(32Bit)大约为 16字节;

存储字符长的指针分配的内存, capacity ;
容量最小为字符串的长度(len)+1;
sizeof(a) 获取的是 string 对象a的大小,是固定的,
(32Bit系统)
大约为 16字节 。
a.size() 获取是a存储的实际字符串的大小 ;当 a="asd",时和strlen("asd") 一样 =3 ;
换成 sizeof() 如果容量比较大的话,开始输出的,是 asd 后面的没有设置的字符,可能是非打印字符,也可能是‘\0’,所以输出n多空白;如果容量比较小,可能会出错。
xingyunbuzui
推荐于2016-08-06 · TA获得超过1160个赞
知道小有建树答主
回答量:346
采纳率:100%
帮助的人:388万
展开全部
1 a.size() 这是字符串string对象的函数,返回字符串的长度。
2 sizeof(a) 是返回对象a占用内存空间的大小,32操作系统,永远返回一个指针的长度4(字节);64位操作系统永远返回8(字节)。(因为实际字符串string类的实现是通过动态分配内存来存放字符串,并不占用对象sizeof计算的大小。)

自然,以程序逻辑该使用a.size()。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5722492f7
2013-03-28 · TA获得超过725个赞
知道小有建树答主
回答量:594
采纳率:0%
帮助的人:477万
展开全部
size和sizeof的方法是不一样的,通俗的说一个表示a中的个数,一个表示a所占的空间大小,跟a的类型有关。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
祥龙九霄
2013-03-29 · 超过30用户采纳过TA的回答
知道答主
回答量:101
采纳率:100%
帮助的人:68.3万
展开全部
因为sizeof得到的是类型所占的字节数,你的是string类型,应该这个值是16,所以输出的时候都是空的。但是size得到的是字符串的长度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2013-03-28 · TA获得超过380个赞
知道小有建树答主
回答量:618
采纳率:50%
帮助的人:228万
展开全部
size和sizeof 不一样。一般来说sizeof 更大。1个int=sizeof 就=4
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式