华中科技大学对字符ASCII码进行奇校验C语言编程解答

描述

输入一个字符串,然后对每个字符进行奇校验,最后输出校验后的二进制数(如'3’,输出:10110011)。

输入描述:

输入包括一个字符串,字符串长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据, 对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。

示例1

输入:

3
3a

复制输出:

10110011
10110011
01100001

答案

#include <stdio.h>

#include <string.h>

// 函数用于对单个字符进行奇校验,并返回校验后的结果字符

char odd_parity(char c) {

    // 将字符转换为ASCII码

    int ascii_value = (int)c;

    // 统计ASCII码中包含的"1"的数量

    int count_ones = 0;

    for (int i = 0; i < 8; i++) {

        if (ascii_value & (1 << i)) {

            count_ones++;

        }

    }

    // 如果数量为偶数,则在最高位添加一个"1",使得总位数为奇数

    if (count_ones % 2 == 0) {

        ascii_value |= (1 << 7);

    }

    // 返回校验后的结果

    return (char)ascii_value;

}

// 函数用于将字符转换为二进制形式并输出

void print_binary(char c) {

    for (int i = 7; i >= 0; i--) {

        printf("%d", (c >> i) & 1);

    }

}

int main() {

    char input[101];

    // 读取输入字符串

    while (scanf("%s", input) != EOF) {

        // 对每个字符进行奇校验并输出结果

        for (int i = 0; input[i] != '\0'; i++) {

            // 对当前字符进行奇校验并输出结果

            char parity_char = odd_parity(input[i]);

            // 将结果输出为二进制形式

            print_binary(parity_char);

            printf("\n");

        }

    }

    return 0;

}

详解

  1. 引入头文件:

    • <stdio.h>:用于输入输出。
    • <string.h>:用于字符串处理函数。
  2. 定义两个函数:

    • odd_parity(char c) 函数用于对单个字符进行奇校验,接受一个字符作为参数,并返回校验后的结果字符。
    • print_binary(char c) 函数用于将字符转换为二进制形式并输出,接受一个字符作为参数。
  3. main() 函数中:

    • 定义了一个字符数组 input[101],用于存储用户输入的字符串。
    • 使用 while 循环,不断读取用户输入的字符串,直到用户输入结束(按下 Ctrl + DCtrl + Z)。
    • 在每次循环中,使用 scanf("%s", input) 从标准输入流中读取一个字符串,并将其存储在 input 数组中。这个 scanf 会一直读取,直到遇到空格、制表符、换行符或文件结束符。
    • 对每个字符进行迭代处理,调用 odd_parity 函数对当前字符进行奇校验,并输出校验后的结果。
    • 在每次迭代中,调用 print_binary 函数将校验后的结果输出为二进制形式,并在输出结束后换行。

要点

1.如何将字符串转换为ASCII码?

  每个字符都有一个对应的 ASCII 码,可以通过将字符赋值给 int 类型的变量来获取其 ASCII 码。

2.ascii_value & (1 << i) 的作用是获取 ASCII 码值 ascii_value 中第 i 位的值

3.ascii_value |= (1 << 7) 的作用是将 ascii_value 的最高位设置为 1。这样,无论 ascii_value 最初的最高位是什么,执行该操作后,最高位都会变为 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

多宝气泡水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值