Stack Overflow на русском Asked by Alexander Stepanov on February 16, 2021
Всем привет!
Моя задача: организовать объединение множеств(объединить элементы двух множеств,при этом чтобы все они были в единственном экземпляре).
у меня есть 4 компоненты:
3 Edit;
1 Button.
При нажатии на Button будет выполняться код, написанный ниже. Вкратце об алгоритме работы: информацию, записанную в первые два Edit-а (числа), перевожу в строчный тип данных, записываю элементы множества 1, а затем элементы множества 2, при этом каждый элемент множества 2 сравниваю с каждым элементом множества 1, если он будет равен хоть 1 из элементов множества 1, то он стирает записанный элемент, чтобы избежать повторов (это последняя строка кода, я не знаю, как это прописать, поэтому я хочу у Вас спросить, как из этой строки: Edit3->Text = Edit3->Text + IntToStr((int)b[w]); сделать строку, которая будет удалять повторяющийся элемент.
int i,j,l,tmp, a[50],b[50], s = 0, k = 0;
AnsiString str=Edit1->Text;
str=str+" ";
l=str.Length();
for(i=1;i<=l;i++){
j = str.Pos(' ')-1;
a[i-1]=StrToInt(str.SubString(1,j));
str.Delete(1,j+1);
l-=j;
k=i-1;
AnsiString str1=Edit2->Text;
str1=str1+" ";
l=str1.Length();
for(i=1;i<=l;i++){
j = str1.Pos(' ')-1;
b[i-1]=StrToInt(str1.SubString(1,j));
str1.Delete(1,j+1);
l-=j;
s=i-1;
for (int i = 0; i <= k; i++){
Edit3->Text = Edit3->Text + IntToStr((int)a[i])+ " ";}
for(int w=0;w<=s;w++){
Edit3->Text = Edit3->Text + IntToStr((int)b[w]) + " ";
for (int i = 0; i <= k; i++){
if(b[w] == a[i]){
Edit3->Text = Edit3->Text + IntToStr((int)b[w]);} } }
Не совсем понятно что вы пытались сделать, но если вам нужно добавить в строку только те элементы из второй строки, каких нет в первой, то это можно делать так:
std::string&
merge_unique(std::string& str1, const std::string str2)
{
std::map<char, int> m;
for (char c : str1)
m[c]++;
for (char c : str2)
if (!m[c]){
str1 += c;
m[c]++;
}
return str1;
}
В строковом обьекте, которую вы передадите как первый аргумент функции, будет содержаться нужная вам строка.
А если вы хотели делать что то похожее, но не так, то используйте идею.
ОБНОВЛЕНИЕ по просьбе автора вопроса:
немного о конструкции for (char c : str1)
если коротко, то
это равносильно, еслибы я записал
int l = str1.length();
for (int i = 0; i < l; ++i) {
char c = str1[i];
m[c]++;
}
map
, это ассоциативный контейнер из стандартной библиотеки. Ассоциативные контейнеры обеспечивают быстрый поиск данных,
основанных на ключах. Контейнер содержит пары ключ/значение...
В данном примере, если в m
нет пары с ключом с
, то m[c]
возвращает значение по умолчанию(для обьектов типа int
это ноль
). Можно написать и без использования ассоциативного контейнера, но код получится длиннее...
Answered by AR Hovsepyan on February 16, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP