• 从第一字符串中删除第二个字符串中所有的字符


    题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。

          例如,输入”They are students.””aeiou”,则删除之后的字符串变成”Thy r stdnts.”

    分析:题目可分解为如何判断一个字符串中包含特定字符以及

          如何在一个字符串中删除特定字。

    判断一个字符串是否包含是定字符,可首先创建一个字符串的Hash表,把字符串中对应的字符对代表的hash元素置为1. 字符参数所代表Hash元素值是为1就表示字符存在。

     (这种“字符串hash”的思想要掌握,可以快速在一些字符中查找某个字符)

    在一个字符串中删除指定字符,比较好的方法是通过快慢消除法。

    具体实现如下:

    #include <stdio.h>
    
    #define Boolean int
    
    #define TRUE 1
    
    #define FALSE 0
    
     
    
    int charHash[256] = {0};
    
    void createCharHash(const char *s)
    
    {
    
          while(*s)
    
          {
    
                charHash[*s++] = 1; //这里默认会进行integral promotion整形提升,所以不需要显示(int)转化
    
          }
    
    }
    
     
    
    Boolean isContain(char c)
    
    {
    
          if(charHash[c])
    
          {
    
                return TRUE;
    
          }else{
    
                return FALSE;
    
          }
    
     
    
    }
    
     
    
    void delChars(char *str, const char *s)//str是要操作的字符,s是删除字符串
    
    {
    
          int i = 0;
    
          int j = 0;
    
          createCharHash(s);
    
          while(str[i])
    
          {
    
                if(!isContain(str[i]))
    
                {
    
                      str[j++] = str[i];
    
                }
    
                i++;
    
          }
    
          str[j] = '';
    
    }
    
    int main(void)
    
    {
          char xie[] = "They are students.";
    
          delChars(xie, "aeiou");
    
          printf("result is %s
    ",xie);
    
          return 0;
    
    }

    当我在写上面的程序时,代码如下;

    char * delChars(char *s,const char* s2)
    {
         createTable(s2);
    
         char *source=s;
        int j=0;
        while(*s)
        {
            if(hashTable[*s]==0)
            {
                 s[j++]=*s;
                
            }
            s++;
        }
        s[j]='';
    }

    总是运行错误,debug了好久,终于找出错在哪里了。

    s[j++]=*s;

    这里错误,我们的j是相对于原来的起点的,这里s已经移动了,不是原来的起点。改正:

    void delChars(char *s,const char* s2)
    {
         createTable(s2);
    
         char *source=s;
        int j=0;
        while(*s)
        {
            if(hashTable[*s]==0)
            {
                //s[j++]=*s 错误
                source[j++]=*s;
            }
            s++;
        }
        source[j]='';
    
         
    }

    转自;http://blog.163.com/xie_wenbin613/blog/static/17548909520125133138852/

  • 相关阅读:
    phpcms v9模板制作常用代码集合
    phpcms v9模板制作教程
    cookie 和session 的区别
    PHP的加密方式
    php基础
    复习 语句
    empty 和 isset的区别和联系
    MySQL数据库引擎介绍、区别、创建和性能测试的深入分析
    ThinkPHP增删改查--改
    使用ajax提交form表单,包括ajax文件上传
  • 原文地址:https://www.cnblogs.com/youxin/p/3294150.html
Copyright © 2020-2023  润新知