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