Jednakost reči
Dve reči su jednake ako imaju isti broj slova i ako se na svim pozicijama nalaze ista slova, bez obzira na velika i mala slova. Napisati funktor case_insensitive_equal koji proverava jednakost dve reči na opisani način. Zatim napisati funkciju:
template <typename ForwardIt1, typename ForwardIt2, typename Compare>
bool all_equal(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, Compare comp);koja vraća true ako su svi elementi u opsegu [first1, last1) jednaki odgovarajućim elementima počevši od first2, prema kriterijumu definisanom funktorom comp, a false inače. Pretpostaviti da drugi opseg ima dovoljno elemenata.
Test
#include <iostream>
#include <vector>
#include <string>
namespace matf {
template <typename ForwardIt1, typename ForwardIt2, typename Compare>
bool all_equal(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, Compare comp)
{
// Ovde ide vasa implementacija
}
// Ovde ide vasa implementacija
} // namespace matf
int main(void)
{
std::vector<std::string> words1 = { "Hello", "world", "Test" };
std::vector<std::string> words2 = { "hello", "WORLD", "test" };
bool are_equal = matf::all_equal(
words1.begin(), words1.end(),
words2.begin(),
matf::case_insensitive_equal()
);
std::cout << std::boolalpha;
std::cout << "All equal (case insensitive): " << are_equal << std::endl; // Output: true
return 0;
}Rešenje
main.cpp
#include <iostream>
#include <vector>
#include <string>
namespace matf {
template <typename ForwardIt1, typename ForwardIt2, typename Compare>
bool all_equal(ForwardIt1 first1, ForwardIt1 last1, ForwardIt2 first2, Compare comp)
{
for (; first1 != last1; ++first1, ++first2) {
if (!comp(*first1, *first2)) {
return false;
}
}
return true;
}
struct case_insensitive_equal {
bool operator()(const std::string &a, const std::string &b) const
{
if (a.size() != b.size()) {
return false;
}
for (size_t i = 0; i < a.size(); ++i) {
if (tolower(a[i]) != tolower(b[i])) {
return false;
}
}
return true;
}
};
} // namespace matf
int main(void)
{
std::vector<std::string> words1 = { "Hello", "world", "Test" };
std::vector<std::string> words2 = { "hello", "WORLD", "test" };
bool are_equal = matf::all_equal(
words1.begin(), words1.end(),
words2.begin(),
matf::case_insensitive_equal()
);
std::cout << std::boolalpha;
std::cout << "All equal (case insensitive): " << are_equal << std::endl; // Output: true
return 0;
}