hdu 4054

来源:互联网 发布:步进电机驱动程序源码 编辑:程序博客网 时间:2024/05/06 00:37

题意:读入一行字符串,16个字符输出一行内容,按格式输出16个字符的ascii码,不足16个字符补上空格,每行的开头是第k个字符的首地址,输出16进制数,每行最后要输出原字符,大写字母换为小写,小写换为大写。
题解:处理有点麻烦的字符串水题。

#include <stdio.h>#include <string.h>const int N = 5000;char str[N];int main() {    while (gets(str)) {        int len = strlen(str);        for (int i = 0; i < len; i++) {            if (i % 16 == 0) {                if (i > 0) {                    for (int j = i - 16; j < i; j++) {                        if (str[j] >= 'A' && str[j] <= 'Z')                            printf("%c", str[j] + 32);                        else if (str[j] >= 'a' && str[j] <= 'z')                            printf("%c", str[j] - 32);                        else                            printf("%c", str[j]);                    }                    printf("\n");                }                printf("%04x: ", i);            }            printf("%x", str[i]);            if (i & 1)                printf(" ");        }        if (len % 16) {            int temp = len % 16;            int l = 16 - temp;            if (l % 2)                l = l * 2 + l / 2 + 1;            else                l = l * 2 + l / 2;            for (int i = 0; i < l; i++)                printf(" ");            for (int j = len - temp; j < len; j++) {                if (str[j] >= 'A' && str[j] <= 'Z')                    printf("%c", str[j] + 32);                else if (str[j] >= 'a' && str[j] <= 'z')                    printf("%c", str[j] - 32);                else                    printf("%c", str[j]);            }            printf("\n");        }        else {            for (int j = len - 16; j < len; j++) {                if (str[j] >= 'A' && str[j] <= 'Z')                    printf("%c", str[j] + 32);                else if (str[j] >= 'a' && str[j] <= 'z')                    printf("%c", str[j] - 32);                else                    printf("%c", str[j]);            }            printf("\n");        }    }    return 0;}
0 0
原创粉丝点击