题意:读入一行字符串,16个字符输出一行内容,按格式输出16个字符的ascii码,不足16个字符补上空格,每行的开头是第k个字符的首地址,输出16进制数,每行最后要输出原字符,大写字母换为小写,小写换为大写。
题解:处理有点麻烦的字符串水题。
#include <stdio.h>
#include <string.h>
const int N = ;
char str[N];
int main() {
while (gets(str)) {
int len = strlen(str);
for (int i = ; i < len; i++) {
if (i % == ) {
if (i > ) {
for (int j = i - ; j < i; j++) {
if (str[j] >= 'A' && str[j] <= 'Z')
printf("%c", str[j] + );
else if (str[j] >= 'a' && str[j] <= 'z')
printf("%c", str[j] - );
else
printf("%c", str[j]);
}
printf("\n");
}
printf("%04x: ", i);
}
printf("%x", str[i]);
if (i & )
printf(" ");
}
if (len % ) {
int temp = len % ;
int l = - temp;
if (l % )
l = l * + l / + ;
else
l = l * + l / ;
for (int i = ; i < l; i++)
printf(" ");
for (int j = len - temp; j < len; j++) {
if (str[j] >= 'A' && str[j] <= 'Z')
printf("%c", str[j] + );
else if (str[j] >= 'a' && str[j] <= 'z')
printf("%c", str[j] - );
else
printf("%c", str[j]);
}
printf("\n");
}
else {
for (int j = len - ; j < len; j++) {
if (str[j] >= 'A' && str[j] <= 'Z')
printf("%c", str[j] + );
else if (str[j] >= 'a' && str[j] <= 'z')
printf("%c", str[j] - );
else
printf("%c", str[j]);
}
printf("\n");
}
}
return ;
}