填空题 下列给定程序中,函数proc()的功能是:将字符串str中的所有字符复制到字符串b中,要求在每复制3个字符之后插入1个空格。例如,在调用proc()函数之前给字符串str输入abcdefghijk,调用函数之后,字符串b中的内容则为abc def ghijk。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdio.h>
void proc(char*str,char*b)
{
int i,k=0;
while(*str)
//****found****
{
i=1;
//****found****
while(i<3||*str)
{
b[k]=*str;
k++;str++;i++;
}
if(*str)
//****found****
{b[k]="";}
}
b[k]="/0";
}
void main()
{
char str[80],b[80];
printf("Enter a string:");gets(str);
printf("The original string:");
puts(str);
proc(str,b);
printf("/nThe string after insert
space:");puts(b);printf("/n/n");
}
【正确答案】
【答案解析】错误:i=1;
正确:i=0;
错误:while(i<3||*str)
正确:while(i<3&&*str)
错误:b[k]="";
正确:b[k++]=""; [解析] 由函数proc()可知,变量i为计算每次字符个数是否到3的计数器变量,其初始值为0,因此,i=1;应改为i=0;。当计数器i小于3,而且字符串str没有结束时,将str中的字符赋值给字符串b,因此,“while(i<3||*str)”应改为“while(i<3&&*str)”。每次计数器变量为3而字符串str没有结束时,字符串b赋值为空格,而不是空字符,因此,“b[k]="";”应改为“b[k++]="";”。