caoxiaolin 发表于 2018-9-1 15:25

字符串删除子串

C和指针第六章课后题:lol

#include <stdio.h>

int del_substr(char *str, char const *substr);

int main(void)
{
        char src[] = "ABCDEFG";
        //char *substr = "FGH";
        char *substr = "CDE";

        int ret = 0;
        ret = del_substr(src, substr);
        printf("ret = %d\n", ret);
        printf("%s\n", src);

       
        return 0;
}

int del_substr(char *str, char const *substr)
{
        char *t_str = str;
        char const *t_substr = substr;
        int flag = 0;

        char *find_str = NULL;

        //查找子串
        while (*t_str)
        {
                if (*t_str == *t_substr)
                {

                        if (find_str == NULL)
                        {
                                find_str = t_str;//指向第一次出现子串的位置
                        }

                        t_substr++;
                        if (*t_substr == '\0') //找到目标子串
                        {
                                break;
                        }
                }
                else
                {
                        t_substr = substr; //复位指针
                        find_str = NULL;
                }

                t_str++;
        }


        if (find_str == NULL)
        {
                flag = 0;
        }
        else
        {
                flag = 1;
                //进行删除除子串

                while (*t_str)
                {
                        t_str++;
                        *find_str = *t_str; //将后面的字符赋值过来

                        find_str++;
                }

        }


        return flag;
}


配个图:



不苦小和尚 发表于 2018-9-1 15:36

厉害,学习学习

老伙计 发表于 2018-9-1 21:34

本帖最后由 老伙计 于 2018-9-1 22:48 编辑

    楼主的程序太罗嗦,看看这个代码:

#include <stdio.h>
#include <string.h>

int del_substr(char * str , char const * substr)
{
    int m    = strlen(str)            ;
    int n    = strlen(substr)         ;
    int flag = 0                      ;
    if (n > 0 && m >= n) {
      int c = 0                     ;
      int d = 0                     ;
      while(c < m) {
            if (! strncmp(& str , substr , n)) {
                c = c + n             ;
                flag ++               ;
            } else {
                str = str ;
            }
      }
      str = 0                  ;
    }
    return flag                     ;
}

int main(void)
{
    char src[] = "ABCDEFG"          ;
    //char *substr = "FGH"          ;
    char substr[] = "CDE"         ;

    int ret = 0                     ;
    ret = del_substr(src , substr);
    printf("ret = %d\n" , ret)      ;
    printf("%s\n" , src)            ;

    return 0                        ;
}

caoxiaolin 发表于 2018-9-2 07:39

老伙计 发表于 2018-9-1 21:34
楼主的程序太罗嗦,看看这个代码:

#include


厉害! 但是书中不让用字符串函数所以就没往那边想

老伙计 发表于 2018-9-2 12:03

本帖最后由 老伙计 于 2018-9-2 12:12 编辑

caoxiaolin 发表于 2018-9-2 07:39
厉害! 但是书中不让用字符串函数所以就没往那边想
那咱就来一个不用字符串函数的:

#include <stdio.h>

int del_substr(char * str, char const * substr)
{
    int m    = 0                ;
    int n    = 0                ;
    int flag = 0                ;
    while (str) m ++         ;
    while (substr) n ++      ;
    if (n > 0 && m >= n) {
      int c = 0               ;
      int d = 0               ;
      while(c < m) {
            int e = 0         ;
            if (m - c >= n) {
                for (int i = 0 ; i < n ; i ++) {
                  if (str == substr) e ++ ;
                  else break                        ;
                }
            }
            if (e == n) {
                c = c + n                           ;
                flag ++                               ;
            } else {
                if (flag) str = str             ;
                c ++                                  ;
                d ++                                  ;         
            }
      }
      str = 0                                    ;
    }
    return flag                                       ;
}

int main(void)
{
    char src[] = "ABCDEFG"         ;
    //char *substr = "FGH"         ;
    char substr[] = "CDE"          ;

    int ret = 0                  ;
    ret = del_substr(src, substr);
    printf("ret = %d\n" , ret)   ;
    printf("%s\n", src)            ;

    return 0                     ;
}
页: [1]
查看完整版本: 字符串删除子串