给定程序MODII.C中fun函数的功能是:将P所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。
例如,若输入
”I ama studenttotakethe examination.”,
则应输出 ”I aM A studenT tO takE thE examination.”。
请修改程序中的错误之处,使它能得出正确的结果。
注意:不要改动main函数,不得删行,也不得更改程
序的结构!
#include
#include
#include
void fun(char *p)
{
int k = 0;
for(; *p; p++)
if(k)
{
/**********found***********/
if(*p==' ')
{
k = 0;
/**********found***********/
*(p-1)= toupper(*(p-1));
}
}
else
k = 1;
}
main()
{
char chrstr[64];
int d ;
printf("/nPlease enter an English sentence within 63 letters: ");
gets(chrstr);
d=strlen(chrstr);
chrstr[d] = ' ' ;
chrstr[d+1] = 0 ;
printf("/n/nBefore changing:/n %s", chrstr);
fun(chrstr);
printf("/nAfter changing:/n %s", chrstr);
}
【正确答案】正确答案:
【答案解析】解析:(1)第一个错误标识下的if语句应该是判断字符串中的字符是否是空格,根据“for(; *p; p++)”语句中for循环条件中p的定义应该为字符型指针变量,*p是取p所指存取单元的值,所以“if(p==' ')”应该改为“if(*p==' ')”。 (2)题干中要求是将每个单词的最后一个字母改成大写,所以它的位置应该是挨着空格的前一个字符,应该是指针p指向字符的前一个位置,“*p=toupper(*(p-1))”是将改动的值赋给了p所指的空格,所以应该改为“*(p-1)= toupper(*(p-1));”且语句未尾应有分号。