首先就是如何确定一个单词的开头字母,判断的标志是空格(空格的Ascii码为32),单词与单词之间会有空格分割这是一个关键条件。但是需要另外考虑两点:一是 一个字符串的首单词前可能不会有空格,所以需要对首单词的首字母进行单独的转换,二是单词间可能会有多个空格的情况出现,所以判断时除了当前字符为空格还需要当前字符的后一个是字母。程序如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


void main() {

    char str[1024];
    int i = 0;
    gets(str);

    while (str[i] != '\0') {

        if (str[0] >= 'a' && str[0] <= 'z') {     //单独对首单词的首字母进行转换

            str[0] = str[0]- 32;

        }

        if (str[i] == 32 && (str[i+1] >= 'a' && str[i+1] <= 'z')) {//对空格的后一个字符进行转换,并且后一个字符需要是小写字母

            str[i + 1] -= 32;

        }

        i++;
    }


    puts(str);
}