请教一下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的最大长度,结果就是这样,记住就行了。