Чтобы удалить дубликаты из строки в C++, можно использовать несколько методов. Вот некоторые из распространенных подходов:
- Использование дополнительной структуры данных (набора):
- Преобразуйте строку в заданную структуру данных, которая автоматически удаляет дубликаты.
- Перебрать набор и создать новую строку без дубликатов.
#include <iostream>
#include <unordered_set>
using namespace std;
string removeDuplicates(string str) {
unordered_set<char> uniqueChars;
string result;
for (char ch : str) {
if (uniqueChars.find(ch) == uniqueChars.end()) {
uniqueChars.insert(ch);
result += ch;
}
}
return result;
}
int main() {
string input = "abbcdeeff";
string output = removeDuplicates(input);
cout << "Original string: " << input << endl;
cout << "String without duplicates: " << output << endl;
return 0;
}
- Сортировка и удаление соседних дубликатов:
- Сортировка символов в строке.
- Перебрать отсортированную строку и удалить соседние дубликаты.
#include <iostream>
#include <algorithm>
using namespace std;
string removeDuplicates(string str) {
sort(str.begin(), str.end());
str.erase(unique(str.begin(), str.end()), str.end());
return str;
}
int main() {
string input = "abbcdeeff";
string output = removeDuplicates(input);
cout << "Original string: " << input << endl;
cout << "String without duplicates: " << output << endl;
return 0;
}
- Использование массива в качестве таблицы поиска:
- Инициализировать массив размером 256 (при условии, что символы ASCII) со всеми значениями, установленными на ноль.
- Перебрать каждый символ в строке и пометить соответствующий элемент массива как 1.
- Создайте новую строку, включив только те символы, для которых элемент массива помечен как 1.
#include <iostream>
#include <cstring>
using namespace std;
string removeDuplicates(string str) {
bool lookup[256] = {false};
string result;
for (char ch : str) {
if (!lookup[ch]) {
lookup[ch] = true;
result += ch;
}
}
return result;
}
int main() {
string input = "abbcdeeff";
string output = removeDuplicates(input);
cout << "Original string: " << input << endl;
cout << "String without duplicates: " << output << endl;
return 0;
}