本题要求实现一个函数,将p所指字符串中每个单词的首字母字母改成大写,大写字母及非字母不变化。(这里的“单词”是指由一个或者多个空格隔开的字符串)。
函数接口定义:
void Conv( char *p );
其中 p
是用户传入的参数,函数将 p 所指字符串中每个单词的首字母改成大写。
裁判测试程序样例:
#include <stdio.h> void Conv( char *p ); int main() { char str[64]; gets(str); Conv(str); printf("After changing: %s", str); return 0; } /* 请在这里填写答案 */
输入样例1:
i am a student.
输出样例1:
After changing: I Am A Student.
输入样例2:
There are 45 students in my class.
输出样例2:
After changing: There Are 45 Students In My Class.
void Conv( char *p )
{
if(*p>='a'&&*p<='z')
{
*p=*p-32;
p++;
}
while(*p!='\0')
{
if(*(p-1)==' '&&(*p>='a'&&*p<='z'))
{
*p=*p-32;
}
p++;
}
}
关键就是如何识别首字母,想到上学期类似的题目中是比较该位的ascll码是否属于小写字母,同时上一位是否为“ ”,唯一有遗漏的地方是例子提示我们整句话的第一个字母也有可能是小写,就会遗漏,可以在最前面先检测首字母是否为小写。同时不要忘了小写转大写是-32(表中先大写后小写)。