改错题
给定程序中fun函数的功能是:将p所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。
例如,若输入
'I am a student to take the examination.',
则应输出'I aM A studenT tO takE thE examination.'。
请修改程序中的错误之处,使它能得出正确的结果。
注意:不要改动main函数,不得删行,也不得更改程序的结构!
给定源程序:
#include <ctype.h>
#include <stdio.h>
#include <string.h>
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('\nAfterchanging:\n%s', chrstr);
}
【正确答案】(1)if(*p==' ') (2)*(p-1)=toupper(*(p-1));
【答案解析】(1)本题重点考查考生对指针的理解,当引用指针指向的元素时,应使用指针运算符*号。 (2)当p指向空格时,将前面的字符转换为大写,因此此处应为*(p-1)而不是*p。