Суть в том,что есть цифры 12 11 1 13 11 1 13 12 . Мне надо вывести эти цифры без дубликатов,а если они есть,то вывести сколько дубликатов. Например, 1 2 11 2 13 2 12 2 Где 2 - это кол-во дубликатов,то есть копий С первой задачей я справился, а вот со второй никак. Помогите,плизз
У меня есть код, можешь его оптимизировать под себя немного, но у меня он работает со строками, но и твою задачу прекрасно выполняет. #include <iostream> #include <sstream> #include <string> #include <vector> #include <set> #include <algorithm> using namespace std; vector<string> v; set<string> s; void f(string t) { int n = count(v.begin(), v.end(), t); // считаем количество совпадений cout << t << ' ' << n << endl; // выводим слово и к-во совпадений } void to_set(string t) { s.insert(t); // вставляем в контейнер set } int main() { string srs; getline(cin, srs); istringstream is(srs); // создаем входной поток is из строки srs string t; while (is >> t) // по очереди слова вставляем в вектор v.push_back(t); //for_each(v.begin(), v.end(), f); // для каждого слова из вектора выполнить функцию f cout << endl; for_each(v.begin(), v.end(), to_set); // каждое слова из вектора заносим в set //ostream_iterator<string> out(cout,"\n"); // итератор вывода на экран //copy(s.begin(),s.end(),out); // выводим уникальные слова for_each(s.begin(), s.end(), f); // для каждого слова из набора выполнить функцию f system("pause"); return 0; } Код #include <iostream> #include <sstream> #include <string> #include <vector> #include <set> #include <algorithm> using namespace std; vector<string> v; set<string> s; void f(string t) { int n = count(v.begin(), v.end(), t); // считаем количество совпадений cout << t << ' ' << n << endl; // выводим слово и к-во совпадений } void to_set(string t) { s.insert(t); // вставляем в контейнер set } int main() { string srs; getline(cin, srs); istringstream is(srs); // создаем входной поток is из строки srs string t; while (is >> t) // по очереди слова вставляем в вектор v.push_back(t); //for_each(v.begin(), v.end(), f); // для каждого слова из вектора выполнить функцию f cout << endl; for_each(v.begin(), v.end(), to_set); // каждое слова из вектора заносим в set //ostream_iterator<string> out(cout,"\n"); // итератор вывода на экран //copy(s.begin(),s.end(),out); // выводим уникальные слова for_each(s.begin(), s.end(), f); // для каждого слова из набора выполнить функцию f system("pause"); return 0; } В первой строке вводишь значения через пробел, потом идет вывод элемента и сколько раз он повторяется
std::map использовать не судьба? #include "iostream" #include "string" #include "map" int main() { std::string source; std::getline(std::cin, source); std::map res; for (size_t i = 0; i < source.length(); ++i) res[source[i]]++; for (auto i : res) std::cout << i.first << " : " << i.second << std::endl; std::cin.get(); } Код #include "iostream" #include "string" #include "map" int main() { std::string source; std::getline(std::cin, source); std::map res; for (size_t i = 0; i < source.length(); ++i) res[source[i]]++; for (auto i : res) std::cout << i.first << " : " << i.second << std::endl; std::cin.get(); }
Парни,сделал так,но выводит 3 1 5 0 7 2 117 1 Код 3 1 5 0 7 2 117 1 а нужно 3 1 5 3 7 2 117 1 Код 3 1 5 3 7 2 117 1 Код вот: #include "stdafx.h" #include<iostream> #include<fstream> #include<sstream> #include<cmath> #include<cstdlib> #include<string> #include<list> #include<vector> #include<algorithm> #include<stdexcept> #include <iomanip> using namespace std; int main() { setlocale(0, ""); ifstream ifs{ "D:\\asdd.txt" }; vector <int> intich; int o; int sk = 1; while (ifs >> o) { intich.push_back(o); } sort(intich.begin(), intich.end()); for (int i = 0; i < intich.size(); i++) { if (i == 0 || intich[i] != intich[i-1]) { cout << intich[i] << setw(3) << sk << endl; sk = 0; } else if (i == 0 || intich[i] == intich[i-1]) { sk++; } } system("pause"); return 0; } Код #include "stdafx.h" #include<iostream> #include<fstream> #include<sstream> #include<cmath> #include<cstdlib> #include<string> #include<list> #include<vector> #include<algorithm> #include<stdexcept> #include <iomanip> using namespace std; int main() { setlocale(0, ""); ifstream ifs{ "D:\\asdd.txt" }; vector <int> intich; int o; int sk = 1; while (ifs >> o) { intich.push_back(o); } sort(intich.begin(), intich.end()); for (int i = 0; i < intich.size(); i++) { if (i == 0 || intich[i] != intich[i-1]) { cout << intich[i] << setw(3) << sk << endl; sk = 0; } else if (i == 0 || intich[i] == intich[i-1]) { sk++; } } system("pause"); return 0; }