删除特定字符

转载 2006年05月26日 21:28:00

[题目]:用 C/C++语言编写一个高效率的函数来删除字符串里给定的字符集。这个函数的调用模型如下:
             viod removechars (char str[], char remove[])
注意,remove中的所有字符都必须从str中删除干净。例如,如果str是"Battle of the Vowels: Hawaii vs. Grozny",remove是"aeiou",这个函数将把str转换成"Bttl f th Vwls: Hw vs. Grzny"。


      我们需要快速到判断某些字符是否在一个字符串中出现,可以用字符来搜索那个数据结构。这意味着我们需要使用字符作为数组的下标(C语言允许把字符映射为整数去充当数组的下标)或者作为hash表的关键字。hash表和数组的元素查找时间都是一个固定值,hash表的查询开销略大于数组,但是使用数组我们必须首先进行初始化为0,它们之间的最大的区别也许是在内存的使用量方面了。采用数组的方案需要为remove中每一种字符准备一个元素以存放该字符是否在str中被删除而做的标记。如果我们处理的是ASCII字符串,则数组的元素个数将上一256个;而在hash表中,输入的字符串有多少种字符,hash表中元素的个数就将是多少。如果str和remove都比较长,但涉及的字符集却不太大(例如两者都是ASCII字符串)时,数组将是最好的选择;如果str和remove都比较短,但涉及的字符集却很大大(例如两者都是Unicode字符串)时,hash表将是最佳的选择。
      该函数可以划分为3个部分:首先把速查表数组的全体元素设置为“0”。然后遍历remove中的每一个字符,把它们在速查表数组里对应的元素设置为“1”。最后,用两个指针来遍历str字符串,对速查表数组里对应为“0”的字符进行拷贝就能得到最终的结果。
  void removechars(char str[], char remove[])
  {  
 int src,dst,removearray[256];
 for(src=0;src<256;src++)
   {
    removearray[src] = 0;
    }
   src=0;
   while(remove[src])
     {
  removearray[remove[src]]=1;
  src++;
     }

 src=dst=0;
 do {
  if(!removearray[str[src]])
  str[dst++]=str[src];
    }while(str[src++]);
         }

C++实现:

/*Removechars.cpp     Amirural设计*/
 #include <iostream.h>
 void removechars(char str[] , char remove[]);   
 void main()
 {
 char str[50],remove[10];
 cout<<"请输入主字符串: ";
 cin.getline(str,50);
 cout<<"请输入要删除的字符集合: ";
 cin>>remove;
 cout<<"输出删除特定字符集后的str: ";
 removechars(str,remove);
 cout<<str<<endl;
  }

 void removechars(char str[], char remove[])
 {  
 int src,dst,removearray[256];
 for(src=0;src<256;src++)
 {
    removearray[src] = 0;
  }
 src=0;
 while(remove[src])
 {
  removearray[remove[src]]=1;
  src++;
 }

 src=dst=0;
 do {
  if(!removearray[str[src]])
   str[dst++]=str[src];
 }while(str[src++]);
 }

 

运行结果:
请输入主字符串:Battle of the Vowels: Hawaii vs. Grozny
请输入要删除的字符集合:aeiou
输出删除特定字符集后的str: Bttl f th Vwls: Hw vs. Grzny

程序员面试题精选100题(36)-在字符串中删除特定的字符[算法]

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 分...
  • GarfieldEr007
  • GarfieldEr007
  • 2016年02月23日 12:37
  • 650

面试题-在字符串中删除特定的字符[算法]

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 ...
  • u012226625
  • u012226625
  • 2014年04月08日 16:53
  • 1002

Excel单元格里面提取或去掉某些字符

1、从最左边起取字符     =left(源数据格,提取的字符数)     =left(A3,2)     表述为:从单元格A3的最左边起,提取2个字符。 2、从最右边起取字符...
  • zhongguomao
  • zhongguomao
  • 2016年11月12日 12:34
  • 2926

2013级C++第17周项目【项目2-用指针玩字符串】--之任意删除字符串的字符

/* * 程序的版权和版本声明部分 * Copyright (c)2013, 在校学生 * All rightsreserved. * 文件名称: 项目2.cpp * 作 者:刘旺 * 完成日期...
  • u012706758
  • u012706758
  • 2014年03月13日 09:05
  • 796

在字符串中删除特定的字符

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”I am lavor_zl.”和”I love you.”,则删除之后的第一个字符串变成”amar_z"。要求相对于第一个...
  • lavor_zl
  • lavor_zl
  • 2015年01月15日 20:13
  • 870

在字符串中删除特定的字符

【题  目】输入两个字符串,从第一个字符串中删除第二个字符串中出现的所有字符。例如:输入"they are students." 与 “aeiou”,则应该输出“thy r stdnts.”。   ...
  • hxh129
  • hxh129
  • 2013年04月21日 12:50
  • 486

在字符串中删除特定的字符

package com.sort; public class DeleteSpecificChars { /** * Q 63 在字符串中删除特定的字符 输入两个字符串,从第一字符串中删除第二...
  • zjcheer_up
  • zjcheer_up
  • 2014年07月21日 15:44
  • 183

在字符串中删除特定的字符

题目:输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。 分...
  • tanyujing
  • tanyujing
  • 2013年03月16日 12:26
  • 10295

oj1998: C语言实验——删除指定字符

问题描述:从键盘输入一个字符串给str和一个字符给c,删除str中的所有字符c并输出删除后的字符串str。  作者:何知令 发表时间:2017年3月2日 输入:第一行是一个字符串; 第二行是一个...
  • qq_36203090
  • qq_36203090
  • 2017年03月02日 22:32
  • 1237

在字符串中删除特定的字符

转自:http://zhedahht.blog.163.com/blog/static/25411174200801931426484/ 题目:输入两个字符串,从第一字符串中删除第二个字符串...
  • u011362104
  • u011362104
  • 2014年06月13日 18:19
  • 336
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:删除特定字符
举报原因:
原因补充:

(最多只允许输入30个字)