华中科技大学 2010 奇偶校验

    xiaoxiao2021-03-25  93

    题目:输入一个字符串,对其中的每个字符,求字符的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); }

    转载请注明原文地址: https://ju.6miu.com/read-19477.html

    最新回复(0)