爱问知识人 爱问教育 医院库

学C语言的朋友们,帮我修改一下这个题,问题出在哪里啊?

首页

学C语言的朋友们,帮我修改一下这个题,问题出在哪里啊?

/*编制函数FUN,起功能是删除一个字符串中指定的字符。要求原始字符串在主函数中输入,处理后的字符串在主函数中输出?  */

#define N 100
void fun (char s[],char c)
{
    char *p; int i=0;
    p=s;
    while (*(p+i)!=c)
    {
        *(s+i)=*(p+i);
        i++;
        if (*(p+i-1)!='\0')
            break;

    }
}

main()
{
    char s[N],c;

    printf("请输入字符串:\n");
    gets(s);
    printf("删除哪个字符?\n");
    scanf("%c",&c);

    fun (s,c);

    puts(s);
    getch();
}

注意是修改不是重做,另外告诉我我错在哪啊?

谢谢了~

提交回答
好评回答
  • 2007-06-08 22:48:53
    fun函数应该做如下修改
    void fun (char s[],char c)
    {
    char *p; int i=0,j=0;
    p=s;
    while (*(p+i)!='\0')
    {
     if(*(p+i)!=c)
      {*(s+j)=*(p+i);j++;}
     i++;
    }
    s[j]='\0';
    }
    加上一个变量j,用它来控制数组s的下标,因为如果等于给定的字符,是应该删除的,所以数组s和p不应该用同一个下标来控制,否则就把p中的所有字符都复制到s中了,起不到删除的作用了。

    梦***

    2007-06-08 22:48:53

其他答案

    2007-06-07 21:01:20
  • 必须重做, 而不是修改.因为你错得太多.
    1. while (*(p+i)!=c) 这样一来只能找出一个. 如果有两个?
    2. Pointer
       p=s; pointer to s
       你只用了一个pointer,应该用两个.
    3. pointer + 1
       应该是 p++, 而你 p+i, i++.这不是错,但不是pointer的用法
     
    void fun (char s[],char c) 
    { 
    char *p; int i=0; 
    p=s; 
    while (*(p+i)!=c) 
    { 
    *(s+i)=*(p+i); 
    i++; 
    if (*(p+i-1)!='\0') 
    break; 
    } 
    } 
    

    w***

    2007-06-07 21:01:20

类似问题

换一换
  • C/C++ 相关知识

  • 电脑网络技术
  • 电脑网络

相关推荐

正在加载...
最新问答 推荐信息 热门专题 热点推荐
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200
  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 181-200

热点检索

  • 1-20
  • 21-40
  • 41-60
  • 61-80
  • 81-100
  • 101-120
  • 121-140
  • 141-160
  • 161-180
  • 175-194
返回
顶部
帮助 意见
反馈

确定举报此问题

举报原因(必选):