在字符串中删除特定的字符 【微软面试100题 第六十三题】

题目要求

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

题目分析

  1. 把第二个字符串的所有字符都存入一个set中;

  2. 遍历第一个字符串的每个字符,同时判断是否该字符在set中,如果在就用后面不在set中且靠当前字符最近的字符覆盖它,如果不在就继续遍历。

代码实现

 

复制代码
#include <iostream>
#include <set>

using namespace std;

char *ChangeChar(char *ch1,char *ch2);

int main(void)
{
    char ch1[] = "They are students.";
    char ch2[] = "aeiou";
    cout << "ch1 is: " << ch1 << endl;
    cout << "ch2 is: " << ch2 << endl;
    cout << "the result is: ";
    cout << ChangeChar(ch1,ch2) << endl;
    return 0;
}
char *ChangeChar(char *ch1,char *ch2)
{
    if(ch1 == NULL)
        return NULL;
    if(ch2 == NULL)
        return ch1;
    char *i = ch1;
    char *j = ch1;
    multiset<char> hash;
    while(*ch2 != '\0')
    {
        hash.insert(*ch2);
        ch2++;
    }
    multiset<char>::iterator iter;
    while(*i != '\0')
    {
        iter = hash.find(*i);
        if(iter == hash.end())
            *j++ = *i++;
        else
            i++;
    }
    *j = '\0';
    return ch1;
}
复制代码

 

 

 

    

posted on   tractorman  阅读(200)  评论(0编辑  收藏  举报

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?

导航

统计

点击右上角即可分享
微信分享提示