/*********************************************************************************
以下为本人的基础测试题,所表答案为我的答案,分析也是自己的理解,如有不对,还望指正。
**********************************************************************************/
编程题4:
输入一英文句子,将其中所有单词首字符转换成大写后输出。
我的源码:
- #include <stdio.h>
- #include <string.h>
- #define MAX 1000
- int main(){
- char a[MAX];
- int i, len, flag = 0;
- gets(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重新置零,以此循环。遍历结束也就处理结束了。我还是一遍遍历一边输出的,因为不想写第二个循环,因为懒。
|
|