【发布时间】:2020-05-31 12:28:21
【问题描述】:
我编写了以下代码来删除给定字符串中的重复项,即如果 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[] 而不是字符串类,它可以正常工作。
【问题讨论】:
-
您不能从 C++ 函数返回自动(非静态)数组。数组不是 C++ 中的第一类对象。
-
@Arun Suryan 您需要删除相邻的重复字符还是所有重复字符?
-
所有重复字符。
-
你应该永远
#include <bits/stdc++.h>。这不仅仅是不好的做法——它不是正确的 C++。它破坏了便携性并养成了糟糕的习惯。通过使用它,您不仅授予编译器在不通知的情况下随时破坏您的代码的权利,而且还使您的代码不可移植和不专业。它还创建了对 C++ 标准库的任何未来设施的隐式依赖,从而基本上搞砸了编译时间。见Why should I not#include <bits/stdc++.h>。