Само задание звучит так:
Написать метод объединения строк, результат должен содержать только те символы которые есть в первой строке и во втором но в результате не может быть повторов.
Я знаю как ввести строки, и получать их элементы через 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);
}
}
}
Не знаю, куда воткнуть динамическое выделение памяти (разве что в задании имеются в виду строки 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;
}
Проще всего пройти 2 циклами по обоим строкам и добавить их элементы в std::unordered_set<>
. В итоге в нём будет нужный вам результат, который можно снова преобразовать в строку.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть класс часы и статический атрибут часовой поясНеобходимо перевести все часы
Экран разбит на 3 окна вертикально, и крайнее левое вертикальное окно разбито на 2 окна горизонтально(вверху occur, внизу shell)Как сохранить это...
Начал читать Александреску, и наткнулся на следующий код в начале книги: