训练一: 零起点学算法72——首字母变大写
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
思路: 用ascll变化 例如A的码值为65 a的码值为97 只需将需要变化的字符强制转换为整数再减32,就能化小写为大写
测试代码一:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
/*
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
*/
int main()
{
char *str = calloc(100, sizeof(char));
while (gets(str) != NULL)
{
if (*str != ' ') printf("%c",(int)*str - 32);
int i,cnt=strlen(str);
for (i = 1; i < cnt; i++)
if (*(str + i-1) == ' ' && *(str + i ) != ' ') printf("%c", (int)*(str + i) - 32);
else printf("%c", *(str + i));
printf("\n");
}
return 0;
}
运行结果:
测试结果:通过 Accepted!
训练二:1166: 零起点学算法73——统计元音
Description
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串,只由小写字母组成。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1
a:2
e:1
i:3
o:0
u:1
测试代码一:
#include<stdio.h>
#include<string.h>
/*
Description
统计每个元音字母在字符串中出现的次数。
Input
输入数据首先包括一个整数n,表示测试实例的个数,然后是n行长度不超过100的字符串,只由小写字母组成。
Output
对于每个测试实例输出5行,格式如下:
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
Sample Input
2
aeiou
my name is ignatius
Sample Output
a:1
e:1
i:1
o:1
u:1
a:2
e:1
i:3
o:0
u:1
*/
#define area 100 //字符长度范围
int fun_wt(char b); //判断该字符是空格,字母,数字还是其他字符 1:a 2:e 3:i 4:o 5:u 6:其他数
int main()
{
char str[area];
int n;
scanf("%d", &n);
getchar();
while (n--)
{
gets(str);
int a = 0;
int i;
int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;//k为空格计数器s为数字计数器z作为字母计数器q作为其他字符的计数器
int rlen = strlen(str); //测出字符串的实际长度
for (i = 0; i < rlen; i++)
{
if (fun_wt(str[i]) == 1) num1++;
else if (fun_wt(str[i]) == 2) num2++;
else if (fun_wt(str[i]) == 3) num3++;
else if (fun_wt(str[i]) == 4) num4++;
else if (fun_wt(str[i]) == 5) num5++;
}
printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n", num1, num2, num3, num4, num5);
}
return 0;
}
int fun_wt(char b)
{
int a;
if (b == 'a') a = 1;
else if (b == 'e') a = 2;
else if (b == 'i') a = 3;
else if (b == 'o')a = 4;
else if (b == 'u') a = 5;
else a = 6;
return a;
}
运行结果:
测试结果: 格式错误
分析: 格式控制一定要注意这个要求—多个测试实例之间由一个空行隔开。
测试代码二:
#include<stdio.h>
#include<string.h>
#define area 100 //字符长度范围
int fun_wt(char b); //判断该字符是空格,字母,数字还是其他字符 1:a 2:e 3:i 4:o 5:u 6:其他数
int main()
{
char str[area];
int n;
scanf("%d", &n);
getchar();
while (n--)
{
gets(str);
int a = 0;
int i;
int num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0;//k为空格计数器s为数字计数器z作为字母计数器q作为其他字符的计数器
int rlen = strlen(str); //测出字符串的实际长度
for (i = 0; i < rlen; i++)
{
if (fun_wt(str[i]) == 1) num1++;
else if (fun_wt(str[i]) == 2) num2++;
else if (fun_wt(str[i]) == 3) num3++;
else if (fun_wt(str[i]) == 4) num4++;
else if (fun_wt(str[i]) == 5) num5++;
}
printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n", num1, num2, num3, num4, num5);
printf("\n"); //格式控制!!
}
return 0;
}
int fun_wt(char b)
{
int a;
if (b == 'a') a = 1;
else if (b == 'e') a = 2;
else if (b == 'i') a = 3;
else if (b == 'o')a = 4;
else if (b == 'u') a = 5;
else a = 6;
return a;
}
运行结果:
测试结果: 通过! Accepted!!
练习三: 零起点学算法79——统计单词个数
Description
输入一行字符(少于300个字符),以回车结束,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。
—–Input
输入一字符串,以回车结束。
—–Output
输出该字符串中单词的个数
—–Sample Input
This is a c program.
—– Sample Output
5
测试代码一:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
/*
Description
输入一行字符(少于300个字符),以回车结束,统计其中单词的个数。各单词之间用空格分隔,空格数可以是多个。
Input
输入一字符串,以回车结束。
Output
输出该字符串中单词的个数
Sample Input
This is a c program.
Sample Output
5
*/
int main()
{
char *str = calloc(300, sizeof(char));
while (gets(str) != NULL)
{
int number = 0;
if (*str != ' ') number++;
int i, cnt = strlen(str);
for (i = 1; i < cnt; i++)
if (*(str + i - 1) == ' ' && *(str + i) != ' ') number++;
printf("%d\n", number);
}
return 0;
}
运行结果:
测试结果:Accepted