Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Подводные камни map C++

Василий Пупков Ученик (96), закрыт 2 года назад
#include <iostream>
#include <string>
using namespace std;
bool CheckAnagram(const string& s1, const string& s2) {
// напишите решение тут
}
// напишем небольшую функцию для проверки
void CheckIsTrue(bool value) {
if (value) {cout << "Test passed :)"s << endl; }
else {cout << "Test failed :("s << endl; }
}
int main() {
CheckIsTrue(CheckAnagram("tea"s, "eat"s));
CheckIsTrue(!CheckAnagram("battle"s, "beatle"s));
CheckIsTrue(!CheckAnagram("lift"s, "elevator"s));
CheckIsTrue(CheckAnagram("ocean"s, "canoe"s));
}
Задание
Слова называются анаграммами, если одно из них можно получить перестановкой букв в другом. Например, “eat” и “tea” — анаграммы, потому что состоят из одних и тех же букв в разном порядке.
Слова “battle” и “beatle” — не анаграммы. В первом две буквы “t”, а во втором две “e”.
Напишите функцию CheckAnagram, которая принимает два слова и возвращает true, если они анаграммы.
Как будет тестироваться ваша программа
Тесты проверят правильную работу функции CheckAnagram.
В качестве параметров будут передаваться слова, целиком состоящие из строчных английских букв.
Функция main, которую вы напишете, учитываться не будет.
Ограничения
Ничего не выводите в cout и не читайте из cin.
Не меняйте название функции — CheckAnagram.
Примеры
Слова hare и rhea. Результат true.
Слова battle и beatle. Результат false.
Слова eat и tea. Результат true.
Слова lift и elevator. Результат false.
Для каждого из двух слов создайте словарь, который сопоставит каждому символу количеству его вхождений в слово.Чтобы создать такой словарь, нужно посчитать символы. Это делается по аналогии с тем, как считались звери в уроке. Нужно пройтись циклом range-based for по символам строки. Получится map<char, int>.
Чтобы упростить себе задачу, создайте самостоятельно функцию, которая по слову строит словарь, считающий буквы.В конце сравните словари обоих слов операцией ==: если слова — анаграммы, словари получатся одинаковые.
Лучший ответ
Двоечник Обыкновенный Высший разум (107531) 3 года назад
#include <iostream>
#include <string>
using namespace std;
bool CheckAnagram(const string& s1, const string& s2) {
int len1 = s1.length();
int len2 = s2.length();
if(len1 != len2) return false;
else
{
char c;
int count1, count2;
for(int x = 0; x < len1; x++)
{
c = s1[x];
count1 = 0;
count2 = 0;
for(int z = 0; z < len1; z++)
if(s1[z] == c) count1++;
for(int y = 0; y < len2; y++)
if(s2[y] == c) count2++;
if(count1 != count2) return false;
}
}
return true;
}
// напишем небольшую функцию для проверки
void CheckIsTrue(bool value) {
if (value) { cout << "Test passed :)"s << endl; }
else { cout << "Test failed :("s << endl; }
}
int main() {
CheckIsTrue(CheckAnagram("tea"s, "eat"s));
CheckIsTrue(!CheckAnagram("battle"s, "beatle"s));
CheckIsTrue(!CheckAnagram("lift"s, "elevator"s));
CheckIsTrue(CheckAnagram("ocean"s, "canoe"s));
}
Двоечник ОбыкновенныйВысший разум (107531) 3 года назад
Если нужно использовать map, тут ничем не помогу. Я не умею с ними работать.
СергейГений (60494) 3 года назад
Test passed
Test passed
Test passed
Test passed
СергейГений (60494) 3 года назад
Запутает кого угодно)
Остальные ответы
Bizon 123321 Ученик (108) 1 год назад
#include <iostream>
#include <string>
#include <map>


using namespace std;

bool CheckAnagram(const string& s1, const string& s2) {
// напишите решение тут
map<char, int> w1;
map<char, int> w2;
for (const char& ch1 : s1) {
++w1[ch1];
}
for (const char& ch2 : s2) {
++w2[ch2];
}
return w1==w2;
}

int main() {
CheckAnagram("tea"s, "eat"s);
!CheckAnagram("battle"s, "beatle"s);
!CheckAnagram("lift"s, "elevator"s);
CheckAnagram("ocean"s, "canoe"s);
}
Похожие вопросы