From ed251006b89063380df4e9ed19bee441bfb9c36c Mon Sep 17 00:00:00 2001 From: Mohammad Sajid Anwar Date: Wed, 12 Nov 2025 15:06:20 +0000 Subject: - Added solutions by Ali Moradi. - Added solutions by Ulrich Rieke. --- challenge-347/ulrich-rieke/cpp/ch-2.cpp | 70 +++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100755 challenge-347/ulrich-rieke/cpp/ch-2.cpp (limited to 'challenge-347/ulrich-rieke/cpp/ch-2.cpp') diff --git a/challenge-347/ulrich-rieke/cpp/ch-2.cpp b/challenge-347/ulrich-rieke/cpp/ch-2.cpp new file mode 100755 index 0000000000..af3c310c05 --- /dev/null +++ b/challenge-347/ulrich-rieke/cpp/ch-2.cpp @@ -0,0 +1,70 @@ +#include +#include +#include +#include +using namespace std::string_literals ; + +std::string handleRest( const std::string & rest ) { + std::string result ; + char dash = '-' ; + int len = static_cast( rest.length( ) ) ; + if ( len == 2 || len == 3 ) { + result = rest ; + } + else { + result = rest.substr(0 , 2 ) ; + result.append(1, dash ) ; + result += rest.substr( 2 ) ; + } + return result ; +} + +void printParts( const std::vector & parts ) { + if ( parts.size( ) == 1 ) + std::cout << *parts.begin( ) << '\n' ; + else { + char dash { '-' } ; + std::string result ; + for ( auto s : parts ) { + result += s ; + result.append(1, dash ) ; + } + result.pop_back( ) ; + std::cout << result << '\n' ; + } +} + +int main( ) { + std::cout << "Enter a phone number consisting of digits , spaces and dashes only!\n" ; + std::string phonenumber ; + std::getline( std::cin , phonenumber ) ; + auto rx = std::regex{ R"(\s|\-)"s} ; + std::string reduced = std::regex_replace( phonenumber , rx , ""s ) ; + int len = static_cast( reduced.length( ) ) ; + if ( len <= 4 ) { + std::cout << handleRest( reduced ) << '\n' ; + } + else { + std::vector parts ; + int partnumber = len / 3 ; + int lengthrest = len % 3 ; + if ( lengthrest != 0 && lengthrest < 2 ) + partnumber-- ; + int pos = 0 ; + int i = 0 ; + while ( i < partnumber ) { + parts.push_back( reduced.substr( pos , 3 ) ) ; + pos += 3 ; + i++ ; + } + int restlen = len - partnumber * 3 ; + if ( restlen == 0 ) + printParts( parts ) ; + else { + std::string rest { reduced.substr( partnumber * 3 ) } ; + parts.push_back( handleRest( rest )) ; + printParts( parts ) ; + } + } + return 0 ; +} -- cgit