首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

求讲解这道题 多谢

2012-08-28 
求讲解这道题 谢谢题干:设计并测试一个函数,其功能是读取输入行里的第一个单词到数组,并丢掉该行中其他的

求讲解这道题 谢谢
题干:
设计并测试一个函数,其功能是读取输入行里的第一个单词到数组,并丢掉该行中其他的字符。一个单词的定义是一串字符,其中不含空格、制表符和换行符。

这个是我写的:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

void input(char *p)
{
int i;
puts("输入字符串");
fgets(p,81,stdin);

for(i=0;i<81;i++)
if(isspace(p[i]))
p[i] = '\0';
fputs(p,stdout);

}


int main(void)
{
char ar[81];
int i;

input(ar);

return 0;
}


这个是标准答案:
#include <stdio.h>
#include <ctype.h>

void word(char *p);

int main(void)
{
  char a[81];
 puts("input your string:");
 gets(a);
 word(a);
 puts(a);

  return 0;
}

void word(char *p)
{
 int begin,end;
 for(begin=0; isspace( *(p+begin) ) ;begin++) continue;
 for(end=begin; !isspace( *(p+end) ) ;end++) continue;
 *(p+end) = '\0';
 for(; *(p + begin) != '\0'; p++)
  *p = *(p + begin);
 *p = '\0';
}

但是2个程序我拿到IDE上都不能通过编译。不知道问题出在哪。希望能讲解下。谢谢




[解决办法]
答案是对的,还可以这样写
flag=0;
for(i=0;p[i];i++)
if(p[i]!=' ')
break;
for(j=i;p[j];j++)
if(p[j]==' ')
break;
从i到j就是第一个单词
[解决办法]
if(isspace(p[i])) {
 p[i] = '\0';
 break;
}
在这儿找到第一个单词后就应该退出来,所以需要break:
[解决办法]
你的答案是对的,vc编译通过,gcc编译通过 运行也没问题
[解决办法]
你的程序是正确的,VC可以编译过去,main函数里多了一个无用的i
[解决办法]

探讨
用到文件函数应该有文件的打开和关闭

[解决办法]
程序编译运行通过。

热点排行
Bad Request.