全部问题 > 当前问题

这问题又在哪= =?

#include <stdio.h>

#include <ctype.h>


void fun(char *str)

{int i ;


while(*str)

for(i=0;i<81;i++)

if(str[i]==' ')

str[i]=str[i+1];


str[i]=0;

}


main()

{

  char str[81];void NONO ();


  printf("Input a string:") ;

  gets(str);

  puts(str);

  fun(str);

  printf("*** str: %s\n",str);

  NONO();

}


void NONO ()

{

/* 请在此函数内打开文件,输入调试数据,调用 fun 函数,

   输出数据,关闭文件。 */

  char str[81];

  int n = 0;

  FILE *rf, *wf ;


never 2016-8-18 22:31:32

共 8 个回答

qqq 2016-8-18 22:57:49

字符串数组申请的内存空间是81,但不代表它就正好有81个元素,只要小于等于81就可以,所以i的循环条件小于81是错的。

never 2016-8-18 22:59:02

回复 qqq:改成str[i]还是不行


qqq 2016-8-18 23:00:55

回复 never:那最外面那个while循环是用来干嘛的。。

qqq 2016-8-18 23:02:13

回复 never:这题的思路不应该是遇到空格就删除,而是应该遇到非空格就将它存在返回的数组里。

qqq 2016-8-18 23:02:51

回复 never:按照你的代码思路,如果有两个空格在一起,就无法得到正确结果了,仔细想想就明白了。

qqq 2016-8-18 23:05:26

回复 never:void fun (char *str)
{
 int i=0;
 char *p=str;
 while(*p)
 {
   if(*p!=' ')          /*删除空格*/
   {
     str[i]=*p;
     i++;
   }
   p++;
 }
 str[i]='\0';            /*加上结束符*/
}

要适应这样的解题思路,加油!

never 2016-8-18 23:12:52

回复 qqq:有两个空格的话第二个先覆盖第一个然后后面的再补上来啊。。

qqq 2016-8-18 23:25:39

回复 never:那如果不是空格咧。。

问题来自: 编程题真题