我的问题:if(*p!=' ') /*删除空格*/ ' '就能代表空格?难道空格没有相应的转义字符?谢谢指导!!!
二级必过!!! 圈内达人 2015-09-08 22:14:01
1983 12 0

请编写一个函数,函数的功能是删除字符串中的所有空格。
例如, 主函数中输入"asd af aa z67", 则输出为 "asdafaaz67"。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。


#include <stdio.h>

#include <ctype.h>

void fun (char *str)

{

int i=0;

char *p=str;

while(*p)

{

if(*p!=' ') /*删除空格*/

{

str[i]=*p;

i++;

}

p++;

}

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();

}



问题来自: 编程题真题

共 12 个回答

    嘿嘿大人 一代宗师 3937天前

    空格本身就是一个可以表示字符啊,为什么需要转义,空格不需要转义字符的

    二级必过!!! 圈内达人 3936天前

    回复 嘿嘿大人:这是我写的,0分,但是我的思想和答案一样啊:

    #include <stdio.h>

    #include <ctype.h>


    void fun(char *str)

    {int i,j=0,n,*t;

    n=strlen(str);

    for(i=0;str[i]!=' '&&i<n;i++)

    str[j++]=str[i];

    str[j]=0;




    }


    main()

    {

      char str[81];void NONO ();


      printf("Input a string:") ;

      gets(str);

      puts(str);

      fun(str);

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

      NONO();

    }


    嘿嘿大人 一代宗师 3936天前

    回复 二级必过!!!str[i]!=' '当满足了这个条件之后就已经跳出了循环,所以你这个语句的意思就是遇到空格就跳出循环,所以当你遇到了第一个空格后,在这之后的字符就没有经历for循环了

    二级必过!!! 圈内达人 3936天前

    回复 嘿嘿大人:我重新编写,0分。为什么?我的:

    #include <stdio.h>

    #include <ctype.h>


    void fun(char *str)

    {int i=0;

    char *p=str;

    whlie(*p)

    {if(*p!=' ')

    *p=str[i++];

    p++;}

    *p=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 ()


    二级必过!!! 圈内达人 3936天前

    回复 嘿嘿大人:答案str[i]=*p;方向反了吧,str[i]='\0';不是*p=0;?

    嘿嘿大人 一代宗师 3936天前

    回复 二级必过!!!:你把字符送给p是什么意思?人家是喊你删除空格不是让你把字符串里面除了空格的字符移动到另外一个空间里面去,那个修改后的字符串必须仍然在原来的数组里面

    二级必过!!! 圈内达人 3936天前

    回复 嘿嘿大人:改成这样还是0分,可能是评分系统问题吧:

    #include <stdio.h>

    #include <ctype.h>


    void fun(char *str)

    {int i=0;

    char *p=str;

    whlie(*p)

    {if(*p!=' ')

    str[i++]=*p;

    p++;}

    str[i]=0;





    }


    二级必过!!! 圈内达人 3936天前

    回复 嘿嘿大人

    回复 嘿嘿大人:改成这样还是0分,可能是评分系统问题吧:

    #include <stdio.h>

    #include <ctype.h>


    void fun(char *str)

    {int i=0;

    char *p=str;

    whlie(*p)

    {if(*p!=' ')

    str[i++]=*p;

    p++;}

    str[i]=0;





    }



    嘿嘿大人 一代宗师 3936天前

    回复 二级必过!!!whlie(*p)关键字写错了是while知道么?不要乱拼写,这种关键字写出来是会变蓝色的

    二级必过!!! 圈内达人 3936天前

    回复 嘿嘿大人

    我直接在记事本上写,结果没发现,考试的时候得在vc6.0上写了。

    输入str="1 2 3" 输出"123" 事实上,我们执行完fun后,str变成"123\n",对吗?原先\n后面是第四位,是3,\n后面的内容系统是不是会自动去除所以当我们str[i]=0;后,第四位的3就没有了。

    嘿嘿大人 一代宗师 3936天前

    回复 二级必过!!!:我没明白你的\n是什么,我只能说当你将空格都删除后,需要在后面加上一个‘\0’不然生成的就是字符数组而不是字符串

    二级必过!!! 圈内达人 3936天前

    输入str="1 2 3" 输出"123" 事实上,我们执行完fun后,str变成"123\0",对吗?原先\0后面是第四位,是3,\0后面的内容系统是不是会自动去除所以当我们str[i]=0;后,第四位的3就没有了。

您还没有登录,所以不能回复该问题
我要回复

  • 0

    点赞

  • 扫一扫分享朋友圈

    二维码

  • 分享

相关问题