基础测试编程题:
输入一英文句子,将其中所有单词首字符转换成大写后输出。
我的想法是这样的,首先我要把句子分割成多个单词,而单词与单词直接的分割无非是空格,逗号和句号。于是我设置了一个flag,默认为0.然后开始遍历这字符串数组。当一个新的单词开始是这个flag应该是0,然后此时读到的字母是首字母,所以我把它大写(asc码-32),同时设置flag为1.意思是这个单词的首字母我已经大写了,下面如果没进入一个新的单词的话我就不干活了。然后当读到空格逗号和句号的时候,我明白了,上一个单词结束了,如果之后再读到字母,那应该是下个单词的首字母了,又要大写了,所以要把flag重新置零,以此循环。遍历结束也就处理结束了。
输入一英文句子,将其中所有单词首字符转换成大写后输出。
我的源码:
/*
输入一英文句子,将其中所有单词首字符转换成大写后输出。
*/
#include <stdio.h>
#include <string.h>
#define MAX 1000
int main(){
char a[MAX];
int i, len, flag = 0;
gets(a);//将整句读入a
len = strlen(a);
for ( i = 0; i < len; i++){
if ( flag == 0 && a[i] <= 'z' && a[i] >= 'a'){//判断是不是首字母,是的话大写。
a[i] -= 32;
flag = 1;
}
if ( a[i] == ' ' || a[i] == ',' || a[i] == '.' ){//判断上一个单词是否已经结束
flag = 0;
}
printf("%c",a[i]);//输出处理过的字符串
}
return 0;
}
我的想法是这样的,首先我要把句子分割成多个单词,而单词与单词直接的分割无非是空格,逗号和句号。于是我设置了一个flag,默认为0.然后开始遍历这字符串数组。当一个新的单词开始是这个flag应该是0,然后此时读到的字母是首字母,所以我把它大写(asc码-32),同时设置flag为1.意思是这个单词的首字母我已经大写了,下面如果没进入一个新的单词的话我就不干活了。然后当读到空格逗号和句号的时候,我明白了,上一个单词结束了,如果之后再读到字母,那应该是下个单词的首字母了,又要大写了,所以要把flag重新置零,以此循环。遍历结束也就处理结束了。