Вывести Различные Буквы Трех Предложений (тоесть Такие Какие Есть Толь

Тема в разделе "C/C++/C#", создана пользователем Prog, 14 июл 2012.

  1. Prog

    Prog Гость

    Вывести различные буквы трех предложений (тоесть такие какие есть только в одном из них)
     
  2. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
     
  3. Prog

    Prog Гость

    #include<iostream>
    #include<string>
    using namespace std;
    string find(string a, string B){
    string x;
    for (int i=0; i<a.size(); i++){
    bool flag=false;
    for (int j=0; j<b.size(); j++)
    if (a==b[j]) flag=true;
    if (!flag) x=x+a;
    }
    for (int i=0; i<b.size(); i++){
    bool flag=false;
    for (int j=0; j<a.size(); j++)
    if (b==a[j]) flag=true;
    if (!flag) x=x+b;
    }
    return x;
    }
    int main(){
    string a, b, c;
    cout<<"First string(1):\t"; cin>>a;
    cout<<"Second string(2):\t"; cin>>b;
    cout<<"Third string(3):\t"; cin>>c;
    string x=find(a,B)+find(a,c);
    for (int i=0; i<x.size(); i++){
    bool flag=false;
    for (int j=i+1; j<x.size(); j++)
    if (x==x[j]) flag=true;
    if (!flag) cout<<x<<"\n";
    }
    system("pause");
    return 0;
    }
    вот пожалста код программы. У меня он почему то не работает, и + нужно дописать что-то чтобы считывались пробелы.
     
  4. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    чтобы считывались пробелы используй std ::cin .getline() вместо оператора >>

    Копипастить код с другого форума мы тоже умеем:
    Код (Text):
    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    #include <iterator>
    #include <algorithm>
    #include <functional>

    std::wstring unique(const std::wstring& s1, const std::wstring& s2)
    {
    std::wstring s1_ = s1;
    std::wstring s2_ = s2;

    std::sort(s1_.begin(), s1_.end());
    std::sort(s2_.begin(), s2_.end());

    std::wstring out;

    std::set_symmetric_difference(s1_.begin(), s1_.end(), s2_.begin(), s2_.end(), std::back_inserter(out));

    return out;
    }

    int main()
    {
    std::vector<std::wstring> seqs = {L"абвг", L"гдежз", L"жзик"};

    std::wcout << std::accumulate(seqs.begin(), seqs.end(), std::wstring(), [](std::wstring s1, std::wstring s2) {return unique(s1, s2);}) << std::endl;
    }
    Не проверял его, но скопипастил оттуда же. Тут Вам помогать никто не будет, т.к. сами решить не пытались, даже не тратьте время )
     
  5. rrrFer

    rrrFer Well-Known Member
    Команда форума C\C++ Team

    Регистрация:
    6 сен 2011
    Сообщения:
    1.324
    Симпатии:
    36
    хотя вру, помогут, вот мой вариант:
    Код (Text):
    #include <string>
    #include <iostream>
    #include <algorithm>
    int main(){
    std ::string s1 = "123", s2 = "345", s3 = "243", t, result;
    t = s1 + s2 + s3;
    std ::for_each( t.begin(), t .end(), [ &result, t](char c){
    if( 1 == std ::count( t.begin(), t.end(), c ) ) result += c;
    });
    std ::cout << result;
    return 0;
    }
    далеко не оптимальный, более оптимальный смотри постом выше.
     
Загрузка...

Поделиться этой страницей