Форум программистов, компьютерный форум CyberForum.ru

найти все элементы пренадлежащие обоим строкам. - C++

Восстановить пароль Регистрация
 
maks_b1
 Аватар для maks_b1
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 29
27.11.2011, 18:05     найти все элементы пренадлежащие обоим строкам. #1
заданы 2 строки найти все элементы пренадлежащие обоим строкам.
(как мне сделать так, чтобы каждый элемент отображался лишь 1 раз?)


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
    int main()    {
    char s1[80], s2[80];
    cout <<"vvedite 2 stroki: ";
    gets (s1), gets (s2);
    cout <<"kolichestvo elementov: "<< strlen(s1)<< '\n';
    cout << strlen(s2)<< '\n';
    char s3[80];
        int p=0;
    for (int t=0; s2[t]; ++t)
    { for (int i=0; s1[i]; ++i)
        if (s1[i]==s2[t])
                {s3[p]=s1[i];
                ++p;}
        }
 
for (int p=0; s3[p];++p)
     {for (int f=(p+1); s3[f]; ++f)
         if (s3[p]==s3[f])
              for (f; s3[f]; ++f)
                     s3[f]=s3[++f];
                 else if(s3[p]!=s3[f]) break;}}
    }
 
     cout<<"obsie elementi: ";
for (int p=0; s3[p]; ++p)
     cout<<s3[p];
    system ("pause");
    return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2011, 18:05     найти все элементы пренадлежащие обоим строкам.
Посмотрите здесь:

C++ дана целочисленная матрица A , размером а х м, найти в матрице первую строку, все элементы которой равны нолю, Умножить элементы столбца с таким же н
в одномерном массиве А состоящем из N элементов найти максимальные элементы и все элементы равные максимальному заменить на 0. C++
Упорядочить все элементы матрицы таким образом, чтобы при чтении матрицы по строкам ее элементы образовывали отсортированный по возрастанию массив C++
C++ Дан массив целых чисел из 10 элементов.Все элементы кратные 10 заменить 0;Все нечетные элементы удвоить, а четные уменьшить на 2;
Дан одномерный массив, найти все отрицательные элементы; элементы, большие данного числа n C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lavan
51 / 51 / 1
Регистрация: 21.03.2009
Сообщений: 371
27.11.2011, 20:02     найти все элементы пренадлежащие обоим строкам. #2
Если устраивает STL то
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
void mrand(vector<int>&);
int main() {
    vector<int>ar1;
    vector<int>ar2;
    vector<int>res;
    mrand(ar1);
    mrand(ar2);
    ostream_iterator<int,char>out(cout," ");
    back_insert_iterator<vector<int> >bit(res);
   set_intersection(ar1.begin(),ar1.end(),ar2.begin(),ar2.end(),bit);
    copy(ar1.begin(),ar1.end(),out);
    cout<<endl;
    copy(ar2.begin(),ar2.end(),out);
    cout<<endl;
    copy(res.begin(),res.end(),out);
    cin.get();
    return 0;
}
void mrand(vector<int>&ref) {
    for(int i=0;i<6;i++) {
        ref.push_back(1+rand()%5);
    }
    sort(ref.begin(),ref.end());
}
maks_b1
 Аватар для maks_b1
1 / 1 / 0
Регистрация: 26.11.2011
Сообщений: 29
29.11.2011, 00:14  [ТС]     найти все элементы пренадлежащие обоим строкам. #3
Спасибо конечно! Но (как мне сделать так, чтобы каждый элемент отображался лишь 1 раз?)

И желательно как-нибудь по проще, а то я только на 1 курсе!)
Mиxaил
 Аватар для Mиxaил
530 / 435 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
29.11.2011, 10:13     найти все элементы пренадлежащие обоим строкам. #4
lavan, раз уж решили писать через STL, то лучше было бы использовать <set>, и не париться:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <set>
#include <string>
 
int main()
{
    std::string FirstLine( "qwerty" ), SecondLine( " eretyuio " );
    std::set < char > SetChars;
 
    for ( size_t index = 0; index < FirstLine.length(); index++ )
        if ( SecondLine.find ( FirstLine [ index ] ) != std::string::npos )
            SetChars.insert ( FirstLine [ index ] );
    
    for ( std::set < char >::iterator it = SetChars.begin(); it != SetChars.end(); ++it )
        std::cout << *it << " ";
    return 0;
}
lavan
51 / 51 / 1
Регистрация: 21.03.2009
Сообщений: 371
29.11.2011, 12:48     найти все элементы пренадлежащие обоим строкам. #5
Mиxaил, так было написанно чтобы показать именно пересечение множеств.
ну если без STL то можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include<iostream>
using namespace std;
char * delsym(char*);
char *delsym(char*,char *);
int main() {
    char m1[]="first string";
    char m2[]="second string";
    char *res1,*res2,*res3;
    res1=delsym(m1); //удаляем повторяющиеся символы
    res2=delsym(m2);
     cout<<res1<<" "<<res2;
     //формируем пересечение без повторяющихся символов
     if(strlen(res1)>=strlen(res2))
       res3=delsym(res1,res2);
     else
       res3=delsym(res2,res1);
     cout<<endl<<res3;
     delete res1;
     delete res2;
     delete res3;
    cin.get();
    return 0;
}
char * delsym(char *ptr) {
    int len=strlen(ptr);
    char *mas=new char[len+1];
    mas[0]=ptr[0];
    int count=1;
    char *ch;
    for(int i=1;i<len;i++) {
       if((ch=strchr(mas,ptr[i]))==NULL)
          mas[count++]=ptr[i];
    }
    mas[count]='\0';
    return mas;
}
char *delsym(char *word1,char *word2) {
    int len1=strlen(word1);
    int len2=strlen(word2);
    char *mas=new char[len1+len2+1];
     int count=0;
    char *ch;
    for(int i=0;i<len2;i++) {
        if((ch=strchr(word1,word2[i]))!=NULL)
            mas[count++]=*ch;
    }
    mas[count]='\0';
    return mas;
}
Yandex
Объявления
29.11.2011, 12:48     найти все элементы пренадлежащие обоим строкам.
Ответ Создать тему
Опции темы

Текущее время: 19:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru