历届试题_空白格式化
标题:空白格式化
本次大赛采用了全自动机器测评系统。
如果你的答案与标准答案相差了一个空格,很可能无法得分,所以要加倍谨慎!
但也不必过于惊慌。因为在有些情况下,测评系统会把你的答案进行“空白格式化”。其具体做法是:去掉所有首尾空白;中间的多个空白替换为一个空格。所谓空白指的是:空格、制表符、回车符。
以下代码实现了这个功能。仔细阅读代码,填写缺失的部分。
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++);
}
请分析代码逻辑,并推测划线处的代码,通过网页提交。
注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!
这道题仔细分析就可以知道是指针指向非题中的三种字符此时指针to才保留一个空格,但要注意的一点是下面代码注释除,这样写是有问题的。,一句话就是char*的内容存放在常量区,不可修改,否则出现系统崩溃问题,具体参考这篇博客:https://blog.csdn.net/yahohi/article/details/7427724(哎,基础没打好真的很容易被嘲笑,)
1 #include<bits/stdc++.h> 2 3 using namespace std; 4 5 void f(char* from, char* to) 6 { 7 char* p_from = from; 8 char* p_to = to; 9 10 while(*p_from==' ' || *p_from=='\t' || *p_from=='\n') p_from++; 11 12 do{ 13 if(*p_from==' ' || *p_from=='\t' || *p_from=='\n'){ 14 do{ 15 p_from++; 16 } while(*p_from==' ' || *p_from=='\t' || *p_from=='\n'); 17 if(*p_from!=NULL) *p_to++ = ' '; //填空位置 18 } 19 }while(*p_to++ = *p_from++); 20 } 21 22 23 int main() 24 { 25 char a[]=" asad v dwdwdw"; 26 char b[]=""; 27 //char* a=" asad v dwdwdw"; 28 //char* b=""; 29 f(a,b); 30 cout << b<< "=b"<<endl; 31 return 0; 32 }
作者:你的雷哥
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。