给定程序MODll.C中fun函数的功能是:将P所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如,若输入 “I am a student to take the examination.”,

admin2020-07-28  28

问题 给定程序MODll.C中fun函数的功能是:将P所指字符串中每个单词的最后一个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。
  例如,若输入
    “I am a student to take the 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)=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  changincj:\n
%s”,chrstr);
  fun(chrstr);
  printf(“\nAfter changing:\n%s”,
chrstr);
}

选项

答案(1)if(*p==‘ ’) (2)*(p一1)=toupper(*(p—1));

解析  函数的功能是将每个单词的最后一个字母改成大写。
  (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));”且语句未尾应有分号。
转载请注明原文地址:https://kaotiyun.com/show/uX3p777K
0

最新回复(0)