鱼C论坛

 找回密码
 立即注册
查看: 1363|回复: 4

[已解决]小白求助

[复制链接]
发表于 2020-3-28 18:23:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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


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

  3. void delchar( char *str, char c );
  4. //void ReadString( char s[] ); /* 由裁判实现,略去不表 */
  5. int main()
  6. {
  7.     char str[MAXN], c;

  8.     scanf("%c\n", &c);
  9.     gets(str);
  10.     delchar(str, c);
  11.     printf("%s\n", str);

  12.     return 0;
  13. }

  14. /* 你的代码将被嵌在这里 */
复制代码



我的:

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

请问这个方法哪里有问题?
最佳答案
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[k]=*ch;
            k++;
        }
    }
    str[k]='\0';
}
我修改后的,我加了一个使用指针的值这样你在循环的时候就不会对指针改变了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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[k]不行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-28 18:44:28 | 显示全部楼层
  1. str[k]=*str;
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-28 18:52:39 | 显示全部楼层
  1. #include <stdio.h>

  2. void delchar(char *s, char c) {
  3.         char *p = s;
  4.         char *q = s;
  5.         while(*q = *p++) {
  6.                 if(*q != c) ++q;
  7.         }
  8. }

  9. int main(void) {
  10.         char str[] = "ab:12:cd:34";
  11.         delchar(str, ':');
  12.         printf("%s\n", str);
  13.         return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[k]=*ch;
            k++;
        }
    }
    str[k]='\0';
}
我修改后的,我加了一个使用指针的值这样你在循环的时候就不会对指针改变了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-13 00:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表