零的执行人 发表于 2020-3-28 18:23:30

小白求助

本题要求实现一个删除字符串中的指定字符的简单函数。
函数接口定义:
void delchar( char *str, char c );


其中char *str是传入的字符串,c是待删除的字符。函数delchar的功能是将字符串str中出现的所有c字符删除。
裁判测试程序样例:
#include <stdio.h>
#define MAXN 20

void delchar( char *str, char c );
//void ReadString( char s[] ); /* 由裁判实现,略去不表 */
int main()
{
    char str, c;

    scanf("%c\n", &c);
    gets(str);
    delchar(str, c);
    printf("%s\n", str);

    return 0;
}

/* 你的代码将被嵌在这里 */



我的:

void delchar( char *str, char c ){
    int k=0;
    for(;*str!='\0';str++){
      if(*str!=c){
            str=*str;
            k++;
      }
    }
    str='\0';
}

请问这个方法哪里有问题?

零的执行人 发表于 2020-3-28 19:26:02

void delchar( char *str, char c ){
    int k=0;
    char *s=str;
    for(;*str!='\0';str++){
      if(*str!=c){
            *s=*str;
            s++;
      }
    }
    *s=*str;
}


我也用指针做了通过了,我想问一下各位大神为什么用数组str不行?

人造人 发表于 2020-3-28 18:44:28

str=*str;

人造人 发表于 2020-3-28 18:52:39

#include <stdio.h>

void delchar(char *s, char c) {
        char *p = s;
        char *q = s;
        while(*q = *p++) {
                if(*q != c) ++q;
        }
}

int main(void) {
        char str[] = "ab:12:cd:34";
        delchar(str, ':');
        printf("%s\n", str);
        return 0;
}

lovely539351 发表于 2020-3-28 19:12:44

void delchar( char *str, char c ){
    int k=0;
    char *ch;
    ch = str;
        for(;*ch!='\0';ch++){
      if(*ch!=c){
            str=*ch;
            k++;
      }
    }
    str='\0';
}
我修改后的,我加了一个使用指针的值这样你在循环的时候就不会对指针改变了
页: [1]
查看完整版本: 小白求助