• 删除字符串中的子串


    请编写一个函数,删除一个字符串的一部分。函数原型如下:
                   int del_substr(char *str, char const *substr)
             函数首先应判断substr是否出现在str中。如果它并未出现,函数就返回0;如果出现,函数应该把str中位于该子串后面的所有字符复制到该子串的位置,从而删除这个子串,然后函数返回1。如果substr多次出现在str中,函数只删除第1次出现的子串。函数的第2个参数绝不会被修改。
             举个例子,假定str指向ABCDEFG。如果substr指向FGH、CDF或XABC,函数应该返回0,str未作任何修改。但如果substr指向CDE,函数就把str修改为指向ABFG,方法是把F、G和结尾的NUL字节复制到C的位置,然后函数返回1。不论出现什么情况,函数的第2个参数都不应该被修改。
            要求:a.你不应该使用任何用于操纵字符串的库函数(如strcpy, strcmp, 等)。
                        b.函数中的任何地方都不应该使用下标引用。
           一个值得注意的是,空字符串是每个字符串的一个子串,如果字符串中删除一个空字符串不会产生变化。

    /*
    ** Delete a portion of a string.
    */
    #include <stdlib.h>
    #include <stdio.h>

    #define TRUE 1
    #define FALSE 0


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

    int main()
    {
        char str1 [] = "xyzabcjklmn";
        char const * str2= "axc";
      int ret;
        printf("before delete: %s ", str1);
        printf("will delete che chars: %s ", str2);
        ret = del_substr(str1, str2);
        printf("After delete : %s ", str1);
        printf("ret = %d ", ret);
        system("pause");
        return 0;
     }

    int del_substr(char *str, char const *substr)
    {
        char const * subP;
        char *strP;
        char *temp;
        int flag = TRUE;

        strP = str;
        if((!*str) || *substr == '')
            return FALSE;

        while(*strP)
        {       
            temp = strP;
            for(subP=substr; *subP; subP++)
            {
                if(*strP == *subP)
                {
                    strP++;

          //flag = FALSE;
                    continue;
                 }
                break;
             }
           
            if(*subP == '')
            {
          flag = FALSE;
                while(*temp++ = *strP++)
                 ;
                break;
             }
            if(flag)
                strP++;
         }
      if(*strP == '' && *subP != '')
       {
        return FALSE;
       }
        return TRUE;
     }

    源程序借鉴于:http://blog.sina.com.cn/s/blog_798f21a00100wy2i.html

    主要做了两处修改:(这样才满足题意要求)

      flag=FALSE;由原来蓝色处移到现在的红色字体处;

      另外添加了

      if(*strP == '' && *subP != '')
       {
        return FALSE;
       }

  • 相关阅读:
    druid + mybatis-spring使用注解方式整合
    druid+dbutils+spring整合web项目
    spring继承注入和自动注入
    spring命名空间注入
    spring入门学习第二篇
    spring入门学习第一篇
    mybatis插入数据返回主键
    北京充电桩数据的获取与展示
    有关“GIS讲堂”升级与更改logo的通知
    一个GISER 6.7的祝福
  • 原文地址:https://www.cnblogs.com/nufangrensheng/p/3235162.html
Copyright © 2020-2023  润新知