杭电2024 2025 2026(关于while,gets循环的一些技巧)
2016-04-25 17:28
639 查看
对于初学者来说poj或者是杭电上的题目经常要用到while()循环。
根据下面两道题可以一谈。
杭电2024:
Problem Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出”yes”,否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
看题很简单,关键在于输入与输出。对于输入不能用scanf()函数,因为输入包括了空格,所以要用gets()函数,gets函数可以把空格也保存进数组。但是对于gets函数要注意回车键。下面有两种处理方式。
1:
2:
杭电 2025
while()函数对于scanf(“%d”,&a) != EOF经常用的但是局限于数对于字符则有。
~scanf()函数的返回值是成功读取变量的个数,这里可能返回是1或0,当返回0时,~0为真,则继续循环,所以该循环的意思是,直到成功读取一个字符串时,才结束循环。
Problem Description
对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
Input
输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
Output
对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入”(max)”。
Sample Input
abcdefgfedcba
xxxxx
Sample Output
abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)
杭电 2026
Problem Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
对于gets注意回车即可。
根据下面两道题可以一谈。
杭电2024:
Problem Description
输入一个字符串,判断其是否是C的合法标识符。
Input
输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。
Output
对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出”yes”,否则,输出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no
看题很简单,关键在于输入与输出。对于输入不能用scanf()函数,因为输入包括了空格,所以要用gets()函数,gets函数可以把空格也保存进数组。但是对于gets函数要注意回车键。下面有两种处理方式。
1:
#include<stdio.h> #include<string.h> #include<ctype.h> int main() { char a[55]; int n; scanf("%d",&n); getchar();//可以消除回车键对gets的影响 while(n--) { int t,flag = 1; gets(a); if(!isalpha(a[0]) && a[0]!='_')//函数isalpha判断a[0]是否为字母,是返回1,否返回0,头文件是<ctype.h> { printf("no\n"); continue; } t = strlen(a); for(int i = 4000 1;i < t; i++) { if(!isalnum(a[i]) && a[i]!='_') //作用和isalpha类似,判断是否为字母或数字 flag = 0; } if(flag == 1) printf("yes\n"); else if(flag == 0) printf("no\n"); } // getchar(); 在电脑上可以暂停以便看答案 return 0; }
2:
#include<stdio.h> #include<string.h> #include<ctype.h> int main() { char a[55]; int n; scanf("%d\n",&n); //可以在scanf()里面加入\n,表示为回车 while(n--) { int t,flag = 1; gets(a); if(!isalpha(a[0]) && a[0]!='_') { printf("no\n"); continue; } t = strlen(a); for(int i = 1;i < t; i++) { if(!isalnum(a[i]) && a[i]!='_') flag = 0; } if(flag == 1) printf("yes\n"); else if(flag == 0) printf("no\n"); } // getchar(); return 0; }
杭电 2025
while()函数对于scanf(“%d”,&a) != EOF经常用的但是局限于数对于字符则有。
~scanf()函数的返回值是成功读取变量的个数,这里可能返回是1或0,当返回0时,~0为真,则继续循环,所以该循环的意思是,直到成功读取一个字符串时,才结束循环。
Problem Description
对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。
Input
输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。
Output
对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入”(max)”。
Sample Input
abcdefgfedcba
xxxxx
Sample Output
abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)
#include<stdio.h> #include<string.h> int main() { char a[105]; while(~scanf("%s",a)) //若没有~则会一直输入 { int i,j; char max; j = strlen(a); max = a[0]; for(i = 0;i < j; i++) { if(a[i] > max) max = a[i]; } for(i = 0;i < j; i++) { if(a[i] == max ) printf("%c(max)",a[i]); else printf("%c",a[i]); } printf("\n"); } return 0; }
杭电 2026
Problem Description
输入一个英文句子,将每个单词的第一个字母改成大写字母。
Input
输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。
Output
请输出按照要求改写后的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted
对于gets注意回车即可。
#include<stdio.h> #include<ctype.h> #include<string.h> int main() { char a[100]; while(gets(a))// 除了输入字符串和回车没有其它操作。 { int j = strlen(a); int i,t = 1; for(i = 0;i < j; i++) { if(t == 1) { a[i] = a[i] - 32; t = 0; } if(!isalpha(a[i])) t = 1; } puts(a); } return 0; }
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- C语言实现选择排序、冒泡排序和快速排序的代码示例
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置