Найти повторяющиеся символы в строке

150
19 февраля 2019, 05:10

Само задание звучит так:

Написать метод объединения строк, результат должен содержать только те символы которые есть в первой строке и во втором но в результате не может быть повторов.

Я знаю как ввести строки, и получать их элементы через at().
Но у меня не получается сделать цикл, чтобы брался элемент первой строки и сверялся с символами с второй строки.
Вот собственно сам код, но он работает неверно.

    #include <iostream>
    #include <string>
    #include <stdio.h>
using namespace std;
int main()
{
    setlocale( LC_ALL,"Russian" );
    string one, tho;
    cout << "Введите первую строку: ";
    getline(cin, one);
    cout << "Введите вторую строку: ";
    getline(cin, tho);
    string tree;
     for(int i = 0; i < one.size(); i++){
        for(int y = 0; y < tho.size(); y++) {
            if (one.at(i) == tho.at(y))
               cout << one.erase(i);
            else
                cout << one.at(i);
        }
     }
    }
Answer 1

Не знаю, куда воткнуть динамическое выделение памяти (разве что в задании имеются в виду строки C, а не C++... но вы так уверенно работаете с string), но вот вариант:

string intercept(const string& a, const string& b)
{
    string res;
    unsigned char s[256] = {0};
    for(char c: a) if (s[c-CHAR_MIN]==0) s[c-CHAR_MIN] = 1;
    for(char c: b) if (s[c-CHAR_MIN]==1) s[c-CHAR_MIN] = 2;
    for(int i = 0; i < 256; ++i) if (s[i] == 2) res += char(i+CHAR_MIN);
    return res;
}
int main()
{
    setlocale( LC_ALL,"Russian" );
    string one, two;
    cout << "Введите первую строку: ";
    getline(cin, one);
    cout << "Введите вторую строку: ";
    getline(cin, two);
    cout << intercept(one,two) << endl;
}
Answer 2

Проще всего пройти 2 циклами по обоим строкам и добавить их элементы в std::unordered_set<>. В итоге в нём будет нужный вам результат, который можно снова преобразовать в строку.

READ ALSO
Что изменить в программе? Не могу додумать

Что изменить в программе? Не могу додумать

Есть класс часы и статический атрибут часовой поясНеобходимо перевести все часы

216
Сохранить текущее состояние окон в emacs

Сохранить текущее состояние окон в emacs

Экран разбит на 3 окна вертикально, и крайнее левое вертикальное окно разбито на 2 окна горизонтально(вверху occur, внизу shell)Как сохранить это...

132
Исключение в c++

Исключение в c++

Написана одна программа на с++,где есть вот такая функция

122
Комбинирование классов стратегий

Комбинирование классов стратегий

Начал читать Александреску, и наткнулся на следующий код в начале книги:

131