zoukankan      html  css  js  c++  java
  • 删除指定字符

    题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”
    和”aeiou”, 则删除之后的第一个字符串变成”Thy r stdnts.”。

    我写的代码,已通过测试,复杂度高。

    #include<iostream>
    using namespace std;
    char *deletestr(char *str1,char *str2)
    {
    	char *str=new char[strlen(str1)];
    	int i=0;
    	while(*str1!='\0')
    	{
    		char *matchstr=str2;int flag=0;
    		while(*matchstr!='\0')
    		{
    			if(*str1==*matchstr)
    			{flag=1;break;}
    			else matchstr++;
    		}
    		if(flag==0)
    		{
    			str[i++]=*str1++;
    		}
    		else str1++;
    	}
    	str[i]='\0';
    	return str;
    }
    int main()
    {
    	char str1[20],str2[20];
    	while(gets(str1))
    	{
    		gets(str2);
    		cout<<deletestr(str1,str2)<<endl;
    	}
    	return 0;
    }
    

     别人写的经典代码

    #include <stdio.h>
    #include <memory.h>
    int delchar(char *src, char *dst);
    int main()
    {
        char src[] = "They are students.";
        char del[] = "aeiou";
        delchar(src, del);
        printf("Output : %s\n",src);
        return 0;
    }
    
    int delchar(char *src, char *dst)
    {
        char *begin = src;
        char *end   = src;
        char hashtable[256];
        int i = 0;
        memset(hashtable,0,sizeof(hashtable));
        while(*dst)
            ++hashtable[*dst++];
        while(*end)
        {
            if(!hashtable[*end])//del character not detected
            {
                *begin = *end ;
                ++begin;
            }
            ++end;
        }  
        *begin= '\0';
    }
    

    此段代码有两点注意

    1.用到了hash的思想来映射字符串。

    2.两个临时指针恰到好处,边遍历边覆盖(即删除操作)

  • 相关阅读:
    JavaScript的作用域
    background的水平条纹和斜向条纹
    CSS currentColor 变量的使用
    pop()和attr()的用法和区别
    指向构造函数的属性值
    OKHTTP缓存max-age和max-stale详解
    js数据类型
    css两列布局之基于BFC规则实现
    vue中央事件总线eventBus的简单理解和使用
    git push 时提示用户名或密码相关错误信息
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2743049.html
Copyright © 2011-2022 走看看