算法竞赛入门经典(第2版)第3章 数组和字符串
例题3-2 WERTYU UVa10082
感悟。
0.1、一直以为是自己读题问题,查了英文原题,才发现本书为了照顾篇幅,略去一些字符串叙述,本人在此折腾了很长时间。没想到字符串范围包含这么广。
Each line may contain digits, spaces,
upper case letters (except Q, A, Z), or punctuation shown above [except back-quote
(`)]. Keys labelled with words [Tab, BackSp, Control, etc.] are not represented in
the input.
0.2、一直纠结于(c=getchar())!=EOF(AC),还是(c=getchar())!='\n'(WA),查了英文原题,才发现。
Input consists of several lines of text.
1、程序很短,测试时间很长。
2、要养成看英文原题的习惯,虽然英文很烂。
3、该题与国内NOIP题型略有不同,NOIP要求main函数必要行进到 return 0;这一步。
附上代码:
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
char s[100]="`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";//该处折腾了很长时间。
int main(){
int length;
int i;
int c;
length=strlen(s);
while((c=getchar())!=EOF){//!='\n'(WA),英文原题说得很清楚,输入包含很多行。
for(i=0;i<length;i++){//查找输入字符在s字符串中位置
if(c==s[i])
break;
}
if(i!=length)//找到,打印前一个字符
printf("%c",s[i-1]);
else//没找到,原样输出
printf("%c",c);
}
return 0;
- }