PAT中测试数据的输入技巧
把测试数据给正确的输入程序中,是做题的开始。有时候在输入测试数据就费了很长时间,所以在此总结一些麻烦的地方及输入技巧。
1.空格的麻烦
在此说明几个知识点
- 用scanf输入int、long、long long、float、double忽略空格、回车
1 2 3 4 5 6 7 8 9
| #include<cstdio>
int main() { int a; scanf("%d",&a); printf("a = %d",a); return 0; }
|
- 用scanf输入char[]、string,遇到空格和回车便结束,要想输入带空格的字符串可以如下
1 2 3 4 5 6 7 8 9 10 11
| #include<iostream> #include<string> using namespace std;
int main() { string a; getline(cin,a); cout<<a; return 0; }
|
1 2 3 4 5 6 7 8 9 10 11 12
| #include<cstdio> #include<cstring>
int main() { char a[100]; fgets(a,100,stdin); int len=strlen(a); a[len-1]='\0'; printf("%s",a); return 0; }
|
2.多余字符的麻烦
1 2 3 4 5 6 7 8 9 10
| #include<cstdio>
int main() { int a; getchar(); scanf("%d",&a); printf("%d",a); return 0; }
|
3.有规律的干扰字符的麻烦
根据干扰字符规律,利用scanf来提取数据
1 2 3 4 5 6 7 8 9
| #include<cstdio>
int main() { int hh,mm,ss; scanf("%d:%d:%d",&hh,&mm,&ss); printf("%d时%d分%d秒",hh,mm,ss); return 0; }
|
4.没有明确要输入多少组测试数据的麻烦
有的题目没有明确会有多少组测试数据,这样就不能简单的指定循环次数来输入测试数据,这时需要如下的方法
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<cstdio>
int main() { int a[10]; int count=0; while(scanf("%d",&a[count])!=EOF) { count++; } printf("读入了%d个数字",count); return 0; }
|
自己输入测试数据的时候,要在测试数据后面加上回车+ctrl z+回车,才能达到EOF的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13
| using namespace std;
int main() { int a; while(cin>>a) { } return 0; }
|