#include #include #include static std::string get_next_filename(std::string filename) { std::regex numbered_reg("(.[^.]*)[(]([1-9][0-9]{0,8})[)](([.].*)?)"), unnumbered_reg("(.[^.]*)(([.].*)?)"); std::smatch what; std::string base_name, number, rest; long new_idx; if (regex_match(filename, what, numbered_reg)) { base_name = what[1]; number = what[2]; rest = what[3]; new_idx = std::stol(number) + 1; } else { regex_match(filename, what, unnumbered_reg); base_name = what[1]; rest = what[2]; new_idx = 1; } std:: cout << filename << " "; return base_name + "(" + std::to_string(new_idx) + ")" + rest; } int main() { std::cout << get_next_filename("dupa(1)") << std::endl; std::cout << get_next_filename("dupa(1).txt") << std::endl; std::cout << get_next_filename("....dupa(1).txt") << std::endl; std::cout << get_next_filename("dupa(01).kupa(22).png") << std::endl; std::cout << get_next_filename("dupa(1)e..txt") << std::endl; std::cout << get_next_filename("dupa(111111111).txt") << std::endl; std::cout << get_next_filename("dupa(1111111111).txt") << std::endl; std::cout << get_next_filename("dupa.txt") << std::endl; return 0; }