读书人

请问一下string + bitset 的有关问题,

发布时间: 2012-03-12 12:45:32 作者: rapoo

请教一下string + bitset 的问题,谢谢大家先
string + bitset 的问题

书上说``从string对象读如位集的顺序是从右向左``

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

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

我理解的是: 从 读入的 bstr 的 右边 向 左 数8位,答案应该是: 01100101

然后我写了下面的程序:

C/C++ code
#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 ;}


结果发现答案却是: 10010101



我要问的就是:

不是从最右边的8位开始读取吗```为什么却是从最左边的8位开始从右往左读取``??

请大家帮帮忙``谢谢了先``




[解决办法]
帮顶
[解决办法]
实际运行了下,发现上面说错了,Sorry。
bitset这个文件是有相应的源代码的。lz可以从bitset的构造函数开始跟踪,在构造函数中调用了拷贝字符串的处理,下面摘的是Dev C++中的这个函数。VS2003的实现类似,函数名不同,是_Construct。
C/C++ code
template<size_t _Nb>    template<class _CharT, class _Traits, class _Alloc>    void    bitset<_Nb>::_M_copy_from_string(const basic_string<_CharT,_Traits,_Alloc>& __s, size_t __pos, size_t __n)    {      reset();      //下面这句话对输入的字符串进行了"截断"处理,确保不大于要求的比特位数      const size_t __nbits = min(_Nb, min(__n, __s.size() - __pos));      for (size_t __i = 0; __i < __nbits; ++__i)    {      switch(__s[__pos + __nbits - __i - 1])        {        case '0':          break;        case '1':          set(__i);          break;        default:          __throw_invalid_argument("bitset -- string contains characters "                                   "which are neither 0 nor 1");        }    }    }
[解决办法]
输入的字符串长于bitset的最大长度,结果就是这样,记住就行了。

读书人网 >C++

热点推荐