題目描述
輸入一個字符串,然後對每個字符進行奇校驗,最後輸出校驗後的二進制數(如'3’,輸出:10110011)。
輸入描述:
輸入包括一個字符串,字符串長度不超過100。
輸出描述:
可能有多組測試數據,對於每組數據, 對於字符串中的每一個字符,輸出按題目進行奇偶校驗後的數,每個字符校驗的結果佔一行。
示例1
輸入
3 3a
輸出
10110011 10110011 01100001
這個題主要是學習了bitset。
bitset包含在頭文件<bitset>中,命名空間爲std。
一般構造爲 bitset<n>bs()
n爲二進制的位數,括號裏的構造函數參數可以是整形,字符型和字符串。
同樣也可以用=賦值(對於整形和字符型可以,字符串不行)
同時重載了[],不過[0]指的是最低位,[n-1]指的是最高位,與平常數組的高低位習慣相反。
一些常用的方法有
對於一個叫做foo的bitset:foo.size()
返回大小(位數)foo.count()
返回1的個數foo.any()
返回是否有1foo.none()
返回是否沒有1foo.set()
全都變成1foo.set(p)
將第p + 1位變成1foo.set(p, x)
將第p + 1位變成xfoo.reset()
全都變成0foo.reset(p)
將第p + 1位變成0foo.flip()
全都取反foo.flip(p)
將第p + 1位取反foo.to_ulong()
返回它轉換爲unsigned long的結果,如果超出範圍則報錯foo.to_ullong()
返回它轉換爲unsigned long long的結果,如果超出範圍則報錯
foo.to_string()
返回它轉換爲string的結果
對於bitset的其他用法可參考:
https://blog.csdn.net/lanchunhui/article/details/49644373
此題代碼:
#include <iostream>
#include <string>
#include <bitset>
using namespace std;
int main()
{
string a;
int i;
while(cin>>a)
{
for(i=0;i<a.size();i++)
{
bitset<8>bs(a[i]);
if(bs.count()%2 == 0)
bs[7] = 1;
cout<<bs.to_string()<<endl;
}
}
/*
char a= '3';
int b = 3;
string c = "00110011";
bitset<8> bs(c);
cout<<bs.to_string()<<endl;
cout<<bs.size()<<endl;
cout<<bs.count()<<endl;
*/
return 0;
}