华中科技大学 2010 奇偶校验

题目:输入一个字符串,对其中的每个字符,求字符的ASCII的二进制表示,放数组的1~7位,校验位放数组的0位,并把数组输出。

学习与体会:

1.什么是奇偶校验码?举例:'a'的ASCII码是97,二进制表示为1100001,如果是奇校验,因为1100001有奇数个1,所以校验位为0,即01100001。

                                              '3'的为0110011,有偶数个1,所以校验位为1(凑出奇数个1),即10110011。 而偶校验则是要凑出偶数个1。

2.cout<<typeid(变量名).name()<<endl; 可以输出变量类型。

3.字符数组的结束符为'\0',可自行赋值使用,例:a[9]='\0'; */

4.memset()函数在头文件<cstring>或<string.h>中。而string类型在<string>中。

#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
using namespace std;

//函数JiOu变量
char a[9]={'0','0','0','0','0','0','0','0','\0'};
int b;
int shang,yu,i=7,num=0;

//求字符奇偶校验码并输出
void JiOu(char c);

int main(){
	string str;
	int len,i;
	while(cin>>str){             //输入字符串
		len=str.length();		     //求长度	
        for(i=0;i<len;i++)           //对每个字符求奇偶校验码并输出
			JiOu(str[i]);
	}
	return 0;
}

//求字符奇偶校验码并输出
void JiOu(char c){
	//初始化变量
	memset(a,'0',8*sizeof(char));    //初始化数组
	b=(int)c;                        //被除数
    i=7;                             
	num=0;                           //'1'的个数

	//求出字符c的ASCII的二进制表示,放入a[1]~a[7]中
	while((shang=b/2)!=0){
		a[i]=b%2+48;                 //求余(48为字符'0'的ASCII)
		if(a[i--]=='1')
			num++;
		b=shang;                     //商成被除数
	}
	a[i]='1';              //非零二进制数的最高位为'1'
	num++;
	//求奇偶校验位,放入a[0]中
	a[0]=num%2==1?'0':'1';
	//输出
	printf("%s\n",a);
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值