题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4054
模拟题。
以后读入一行就用gets(str)或者cin.getline(str,len)吧。以前都用scanf(" %[^\n]s",str),这题体会到有不可预知的错误。。。。
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
using namespace std;
char str[5000];
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
#endif
int len;
int cur;
int row;
int cas = 0;
//while(scanf(" %[^\n]s",str)!=EOF)
while(cin.getline(str,4500))
//while(gets(str))
{
cas++;
cur = 0;
len = strlen(str);
row = ceil((double)len / 16.0);
for(int i=0; i<row; i++)
{
printf("%04x: ",i*16);
for(int j=i*16; j<(i+1)*16; j++)
{
if(j<=len-1)
{
if(!(j&1)) printf("%02x",str[j]);
else printf("%02x ",str[j]);
}
else
{
if(!(j&1)) printf(" ");
else printf(" ");
}
}
for(int j=i*16; j<min((i+1)*16,len); j++)
{
if(isalpha(str[j]))
{
if(islower(str[j]))
{
str[j] = toupper(str[j]);
}
else
{
str[j] = tolower(str[j]);
}
}
printf("%c",str[j]);
}
printf("\n");
}
}
return 0;
}