Двоечник Обыкновенный
Высший разум
(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));
}
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);
}
#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>.
Чтобы упростить себе задачу, создайте самостоятельно функцию, которая по слову строит словарь, считающий буквы.В конце сравните словари обоих слов операцией ==: если слова — анаграммы, словари получатся одинаковые.