注册 登录
编程论坛 C++教室

string + bitset 的问题

死了都要C 发布于 2008-01-06 21:16, 2226 次点击
书上说``从string对象读如位集的顺序是从右向左``

书后也有一道题: string bstr ;
              cin >> bstr ;
              bitset<8> bv( bstr ) ;

解释bitset对象包含的位模式.

我理解的是: 从 读入的 bstr 的 右边 向 左 数8位(0-7)``` 赋给  bv  的最8位(0-7)`

然后我写了下面的程序:

#include <iostream>
#include <bitset>
#include <string>

using std :: cout ;
using std :: cin  ;
using std :: endl ;
using std :: bitset ;
using std :: string ;

int main(void)
{
    cout << "\nEnter the bit string :" << endl ;
   
    string bstr ;
    cin  >> bstr ;
   
    bitset<8> bv(bstr) ;
   
    cout << "\nbstr:" << bstr << endl
         << "bitset<8> bv(bstr):  " << bv << endl ;
 
    return 0 ;
}

结果发现并不是那样的``而反的``是从读入的 bstr 的 左边 向 右 数8位(0-7)``` 赋给  bv  的最8位(7-0)```
13 回复
#2
死了都要C2008-01-06 21:17
这是怎么会事啊``我的程序有错吗?
#3
随心2008-01-06 21:37
我理解的是: 从 读入的 bstr 的 右边 向 左 数8位(0-7)``` 赋给  bv  的最8位(0-7)`
这样理解不对吧。
从 读入的 bstr 的 右边 向 左 数8位(7-0)``` 赋给  bv  的低阶位(0-7)`

[[italic] 本帖最后由 随心 于 2008-1-6 21:40 编辑 [/italic]]
#4
新男孩2008-01-06 21:59
你应该看的是C++ Primer 第四版吧,在“用string对象初始化bitset对象”下不是有个注解嘛,那个可以很好的帮你理解这个问题。例如:
string strval("1100");
bitset<8> bitvec(strval);
cout << bitvec << endl;
结果应该是00001100
因为string strval("1100");相当于strval[4] = {1, 1, 0, 0};当用strval初始化bitvec时,用strval下标最小的初始化bitvec下标最大的,即:strval[0] -- strval[3]初始化bitvec[3] -- bitvec[0].这样你的程序运行所得的结果就可以正确解释了。
#5
新男孩2008-01-06 22:02
对上帖再作个补充:以后当用string 初始化 bitset 时,直接可以从字面上可以看出来,就是将string值的字面值直接搬到bitset的字面值就可以了。
#6
新男孩2008-01-06 22:07
只有本站会员才能查看附件,请 登录
hehe!
#7
新男孩2008-01-06 22:09
hehe
#8
xyxyxyxy2008-01-07 12:19
#9
中学者2008-01-07 13:40
LZ学习神速啊!!!
#10
死了都要C2008-01-07 13:58
原帖由 [bold][underline]新男孩[/underline][/bold] 于 2008-1-6 21:59 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1173119&ptid=196188][/url]
你应该看的是C++ Primer 第四版吧,在“用string对象初始化bitset对象”下不是有个注解嘛,那个可以很好的帮你理解这个问题。例如:
string strval("1100");
bitset bitvec(strval);
cout  ...



你说的这个我知道```但是解决不了我提的问题``
#11
死了都要C2008-01-07 14:05
你说的是初始化的字符串的位数<=bitset位数的情况``

而我的问题是初始化的字符串的位数>bitset位数的情况``

照你那样说```(我也是那样理解的)``

那么答案应该是    :01100101
可以我运行的答案是:10010101

读取不是把字符串最右边的8位`````而是读取的最左边的的8位``

我要问的就是:

``不是从最右边的8位开始读取吗```为什么当范围超出的时候``
   却是从最左边的8位开始从右往左读取``

但是还是谢谢你``
#12
leeco2008-01-09 13:12
这是以书为真理的思维方式的弊端的体现
当书上的描述与实验结果产生不一致现象时,
首先,确认自己对书本的理解是否正确,
其次,确认书本的描述是否正确。

但是,我要说的是,实践是检验真理的唯一标准,真理已经放在你的面前了,我不需要知道是我的理解问题还是书本的描述问题
#13
eagleboycn2008-01-09 17:53
我想是不是bitset类型对应输出格式的问题?
如果加上    
for (int i=0;i<8;i++)
cout<<bv[i];

则可以发现此时bv各项值,与书上的描述就一致了
#14
THE_ONE2009-07-14 16:40
Bitset
Hello,
我复制以上代码到C-free中运行,怎么不能运行了呢,显示
错误的,什么原因呢?
1