华中科技大-奇偶校验

  • 问题描述:
    输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如’3’,输出:10110011)。
    输入描述:
    输入包括一个字符串,字符串长度不超过100。
    输出描述:
    可能有多组测试数据,对于每组数据,
    对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。
    示例1
    输入
    复制
    3
    3a
    输出
    复制
    10110011
    10110011
    01100001
  • 关于
    奇偶校验
    这是两种校验方式,以奇校验为例:
    一般有两种情况:一,原始流在前,校验位在后;二、校验位在前,原始流在后;
    这两种情况都是只有一位校验位。
    校验位的作用就是使得发送的二进制流中保证仅有奇数个1:如果原始流中有偶数个1,则校验位为1,如果原始流中有奇数个1,则校验位为0;
    校验原理:如果接收方收到的二进制流中有偶数个1就说明出错了,要丢弃,但是并不能找出是哪一位出错,所以奇偶校验仅能发现错,不能更改错。
    奇偶校验仅能发现奇数个错误,偶数位的错误发现不了。
#include<iostream>
#include<cstring>
#include<string>
#include<bitset>
using namespace std;
int main(){
    //思路:求ASCI码,判1的个数,如果为偶数个,则校验位(根据例子可得在最高位)为1,反之为0
    string str;
     bitset<8> bit;//校验后的二进制数是8位,原来7位加上一位校验位,默认位全0  bitset
    while(cin>>str){
        int len= str.length();
        for(int i=0;i<len;i++){ 
           bit=str[i];  //将每一个字符的ASIIC码转化为二进制
            if(bit.count()%2==0)  //如果原始码有偶数个1
                bit.set(7,1);  //bitset是从第0位开始的,那就在最高位置1
            cout<<bit<<endl;
        }
    }
   
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值