Нахождение общих символов двух строк

Была задача написать программу, которая находит все символы, встречающиеся в обеих переданных ей строках. Реализовал через multiset, по идее все должно работать, однако проходит не все тесты и тест дающий ошибку придумать не могу.

Вот задача: Напишите программу, которая находит все символы, встречающиеся в обеих переданных ей строках.

Входные данные На вход программы подаются две символьные строки, каждая строка завершается символом "конец строки".

Выходные данные Программа должна вывести все символы, которые встречаются в обеих строках, в порядке возрастания их ASCII-кодов. Если таких символов нет, нужно вывести слово 'NO'. Вот сам код:

#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
int main()
{
    std::string s1, s2;  std::cin >> s1 >> s2;
    std::multiset<char> a, b;
    std::multiset<char> intersection;
    for (int i = 0; i < s1.length(); ++i)
    {
        a.insert(s1[i]);
    }
    for (int i = 0; i < s2.length(); ++i)
    {
        b.insert(s2[i]);
    }
    std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), std::inserter(intersection, intersection.begin()));
    if (intersection.size() != 0)
    {
        for (char i : intersection) 
        {
            std::cout << i;
        }
    }
    else std::cout << "NO";
    system("pause");
    return 0;
}

Ответы (2 шт):

Автор решения: AR Hovsepyan

Используйте функции_члены std::string :

size_t pos = s1.find_first_of(s2);
while ( pos < s1.size()) {
    cout << s1[pos] << ' ';
    pos = s1.find_first_of(s2, pos + 1);
}

с помощью сета:

set<char> s(s1.begin(), s1.end());
for (char c : s2) {
    if (!s.emplace(c).second)
        cout << c << ' ';
}
→ Ссылка
Автор решения: Harry

Ну, я бы делал так:

int main()
{
    string s;
    getline(cin,s);
    set<char> a(s.begin(),s.end());
    getline(cin,s);
    set<char> b(s.begin(),s.end());

    set_intersection(a.begin(), a.end(),
                     b.begin(), b.end(),
                     ostream_iterator<char>(cout, " "));
    cout << "\n";
}

А, да, если ничего нет - то нужно же выводить NO - ну, думаю, тут вы допишете сами?..

→ Ссылка