Pewnie znalazło by się jeszcze wiele innych sposobów..
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <regex>
#include <cctype>
bool check_regex(const std::string& login) {
// Wyłącznie małe litery ASCII
std::regex pattern{R"!(^[a-z]+$)!"};
return std::regex_match(login, pattern);
}
bool check_all_of(const std::string& login) {
// Wszystkie znaki spełniają kryterium są małą literą ASCII
return std::all_of(login.cbegin(), login.cend(), [](const char ch) {
return std::islower(ch);
});
}
bool check_count_if(const std::string& login) {
// Ilość małych liter jest taka sama jak liter loginu
return static_cast<long>(login.length()) == std::count_if(login.cbegin(), login.cend(),
[](const char ch) {
return std::islower(ch);
});
}
void run_test(const std::string& func_name,
bool (*func)(const std::string&),
const std::vector<std::string>& login_tests) {
std::cout << func_name << '\n' << std::string(20, '-') << '\n';
for(const auto& str: login_tests) {
std::cout << str << std::boolalpha << '\t' << func(str) << '\n';
}
std::cout << std::string(20, '-') << '\n';
}
int main() {
const std::vector<std::string> login_tests = {
"amber", "mąka", "9gupy", "Supr", "raq!dan"
};
run_test("check_regex()", check_regex, login_tests);
run_test("check_all_of()", check_all_of, login_tests);
run_test("check_count_if()", check_all_of, login_tests);
}