c++ - 从CPP中的字符串中删除重复项

标签 c++ string algorithm stl

我编写了以下代码,用于从给定的字符串中删除重复项,即如果输入ARRUN,则输出将为ARUN。

#include <bits/stdc++.h>
using namespace std;
char* removeDuplicates(string &s,int n){
    char arr[n];
    unordered_map<char,int> exists;
    int index = 0;
    for(int i=0;i<n;i++){
        if(exists[s[i]]==0)
        {
            arr[index++] = s[i];
            exists[s[i]]++;
        }
    }
    return arr;
}

//driver code
int main(){
    string str;
    cin >> str;
    cout<<removeDuplicates(str,str.length())<<endl;
    return 0;
}

该代码完全不产生任何输出,但是,如果我使用char arr[]而不是字符串类,它可以很好地工作。

最佳答案

没有char arr[n]常量或n的情况下,您不能使用constexpr
您不需要mapset就足够了。
请注意,mapset已经删除了重复项,然后您可以检查是否插入了任何元素,以按照与第一个相同的顺序获取新字符串,如下所示

#include<string>
#include<iostream>
#include<unordered_set>

std::string removeDuplicates(const std::string &s){
    std::string arr;
    std::unordered_set<char> exists;

    for(const auto&el:s)
        if(exists.insert(el).second) arr+=el;

    return arr;
}

//driver code
int main(){
    std::string str;
    std::cin >> str;
    std::cout<<removeDuplicates(str)<<std::endl;
    return 0;
}

关于c++ - 从CPP中的字符串中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60247783/

相关文章:

c++ - Sample Grabber 返回的 IMediaSample 具有意外的缓冲区大小

c++ - C 和 Matlab : Why does this one line in Matlab become so many lines in C++ code generated by Matlab Coder?

string - MS-DOS 8.0 : Determine String Length?

algorithm - 找到 MST 的所有临界边

c++ - C++ 中的编译器和参数求值顺序

javascript - 如何使用匹配重新排列 JavaScript 数组?

java - 重复的正则表达式

java - 在 O(n^2) 中查找数组中的所有三元组

algorithm - 找到第一个大于 N 且与 M 互质的数

c++ - 以指针为键的QMap