删除特定字符
来源:互联网 发布:朝阳区群众知乎 编辑:程序博客网 时间:2024/05/16 09:54
题目大意:编写一个高效率的算法来删除字符串中的给定字符。比如,“This is a student!”是源字符串,“aeiou”是删除字符串,则结果为“Ths s stdnt!”.
一开始想到新建两个数组,一个用下标表示删除字符串中出现的字符,一个用来存储经过处理的字符串,结果输出第二个数组,代码如下:
#include <iostream>#include <string.h>using namespace std;static char Remove_List[256];void DeleteChar(char *Source,char *Remove){ int i; int n = strlen(Source); int m = strlen(Remove); char Source_Result[n]; for(i = 0;i < 256;i++) { Remove_List[i] = 0; } for(i = 0;i < m;i++) { Remove_List[Remove[i]] = 1; } int index = 0; for(i = 0;i < n;i++) { if(Remove_List[Source[i]] == 0) { Source_Result[index] = Source[i]; index++; } } for(i = 0;i < index;i++) { cout<<Source_Result[i]; } cout<<endl;}int main(){ int n,m,i; char Source[] = "This is a student!"; char Remove[] = "aeiou"; DeleteChar(Source,Remove); return 0;}
后来尝试了省略第二个数组,直接在源字符串上修改,代码如下:
#include<iostream>#include<string.h>using namespace std;void DeleteChars(char *Source, char *Remove){if(Source==NULL || Remove==NULL)return;//Remove_List标记字符是否在字符串second中出现...bool Remove_List[256];memset(Remove_List,0,sizeof(Remove_List));size_t len1 = strlen(Source);size_t len2 = strlen(Remove);//扫描字符串Remove,在Remove_List中标记出现的字符for(int i=0; i<len2; i++)if(!Remove_List[Remove[i]])Remove_List[Remove[i]] = true;char *slow = Source;char *fast = Source;//删除Source中出现在Remove中的字符while(*fast != '\0'){if(!Remove_List[*fast]){*slow = *fast;++slow;}++fast;}*slow = '\0';}int main(){char Source[] = "This is a student!";char Remove[] = "aeiou";DeleteChars(Source,Remove);cout<<Source<<endl;return 0;}
另外要注意的是,如果我们将char Source[] = "This is a student!"改为char *Source = "This is a student!",则执行时会错误。
因为char *Source = "This is a student!"中,Source指针指向的是一个常量内存区,通过传址方式改变其中的值当然会报错。而char Source[] = "This is a student!"中Source是一个一维数组,且"This is a student!"存在的区域也不是在常量内存区,所以可以改变其值。
举例说明其他情况:
*pp = "abc";
p[] = "abc";
*pp指向的是字符串中的第一个字符。
cout<<pp; 返回pp地址开始的字符串:abc
cout<<p; 返回p地址开始的字符串:abc
cout<<*p; 返回第一个字符:a
cout<<*(p+1); 返回第二个字符串:b
cout<<&p[1]; 返回从第二个字符开始的字符串:bc
0 0
- 删除特定字符
- 删除特定字符
- 删除特定字符
- 删除特定字符
- 删除特定字符
- 删除字符串中的特定字符
- 删除字符串中特定字符
- 字符串中删除特定字符
- 删除字符串中的特定字符
- 从字符数组中删除特定字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- 字符串中删除特定的字符
- 在字符串中删除特定的字符
- 在字符串中删除特定的字符
- CoreData实例分析学习(1)
- 面向自由职业者和小型企业的开源开票工具
- wikioi 1553 互斥的数
- Linux企业级项目实践之网络爬虫(26)——线程池
- Cross correlation/互相关
- 删除特定字符
- Autocorrelation/自相关
- Linux企业级项目实践之网络爬虫(27)——多路IO复用
- 黑马程序员之----------7K面试题之交通灯管理
- Null hypothesis significance testing
- Linux企业级项目实践之网络爬虫(28)——爬虫socket处理
- 如何与别人合作共同来创业
- [Sqlite]-->使用Java程序、cmd命令行来备份恢复Sqlite数据库
- 创业赢利模式全解密(zt) .