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.两个临时指针恰到好处,边遍历边覆盖(即删除操作)

  • 相关阅读:
    深入剖析C#的多态
    .NET多线程编程:多任务和多线程
    .Net类库中实现的HashTable
    用C#编写ActiveX控件
    用微软.NET架构企业解决方案 学习笔记(四)业务层
    SQL事务
    WCF基础知识问与答
    在.NET环境中使用单元测试工具NUnit
    圣殿骑士博客转载系列
    系统架构师学习笔记_第十二章
  • 原文地址:https://www.cnblogs.com/tgkx1054/p/2743049.html
Copyright © 2011-2022 走看看