2574: 空白格式化

时间限制: 1 Sec  内存限制: 128 MB

提交: 233  解决: 118

题目描述

恭喜你进入了蓝桥杯总决赛,本次大赛采用了全自动机器测评系统。

如果你的答案与标准答案相差了一个空格,很可能无法得分,所以要加倍谨慎!

但也不必过于惊慌。因为在有些情况下,测评系统会把你的答案进行“空白格式化”。其具体做法是:去掉所有首尾空白;中间的多个空白替换为一个空格。所谓空白指的是:空格、制表符、回车符。

以下代码实现了这个功能。仔细阅读代码,填写缺失的部分,并补充完整使其能够工作。

void f(char* from, char* to)

{

char* p_from = from;

char* p_to = to;

while(*p_from==' ' || *p_from=='\t' || *p_from=='\n') p_from++;

do{

if(*p_from==' ' || *p_from=='\t' || *p_from=='\n'){

do{p_from++;} while(*p_from==' ' || *p_from=='\t' || *p_from=='\n');

if(____________________) *p_to++ = ' ';  //填空位置

}

}while(*p_to++ = *p_from++);

}

输入

一行代码,不是标准格式。

输出

输出代码的标准形式。

样例输入

      char*        p_from =     from;    

样例输出

char* p_from = from;

提示

代码的标准格式是,首尾没有空格,中间有空格的地方应该只有一个空格不能有多个。

迷失在幽谷中的鸟儿,独自飞翔在这偌大的天地间,却不知自己该飞往何方……

#include<stdio.h>
int main()
{
void f(char* from, char* to);
char pf[1000],pt[1000];
char *pff=pf,*ptt=pt;
while(~scanf("%s",pf))
{
f(pff,ptt);
printf("%s ",pt);
}
printf("\n");
return 0;
}
void f(char* from, char* to)
{
char* p_from = from;//对指针赋值,其中p_from为开始
char* p_to = to; //p_to 为结束
while(*p_from==' ' || *p_from=='\t' || *p_from=='\n')
p_from++; //第一个字符,当指针所指为空格或tab或换行
do
{
//当指针所指内容为空格或tab或换行,指针向后移动
//如果不为 空格或tab或换行,p_to=p_from,后两者均向后移动
if(*p_from==' ' || *p_from=='\t' || *p_from=='\n')
{
do
{
p_from++;
}
while(*p_from==' ' || *p_from=='\t' || *p_from=='\n');
//当指针所指内容为空格或tab或换行,指针向后移动
if(*p_from!=' '&&*p_from=='\t' && *p_from=='\n') *p_to++ = ' ';
//当指针内容不为空时,令p_to指针记录p_from 的地址
}
}
while(*p_to++ = *p_from++); //当*p_to不为空时循环
}
05-11 20:19