diff options
| author | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2025-11-12 15:06:20 +0000 |
|---|---|---|
| committer | Mohammad Sajid Anwar <mohammad.anwar@yahoo.com> | 2025-11-12 15:06:20 +0000 |
| commit | ed251006b89063380df4e9ed19bee441bfb9c36c (patch) | |
| tree | 0bdf941f6f474e5bf2506c44dea91c596492cf04 /challenge-347/ulrich-rieke/cpp/ch-2.cpp | |
| parent | 7e527e85122404992ef7d38ddd016c9980b2806f (diff) | |
| download | perlweeklychallenge-club-ed251006b89063380df4e9ed19bee441bfb9c36c.tar.gz perlweeklychallenge-club-ed251006b89063380df4e9ed19bee441bfb9c36c.tar.bz2 perlweeklychallenge-club-ed251006b89063380df4e9ed19bee441bfb9c36c.zip | |
- Added solutions by Ali Moradi.
- Added solutions by Ulrich Rieke.
Diffstat (limited to 'challenge-347/ulrich-rieke/cpp/ch-2.cpp')
| -rwxr-xr-x | challenge-347/ulrich-rieke/cpp/ch-2.cpp | 70 |
1 files changed, 70 insertions, 0 deletions
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 <string>
+#include <iostream>
+#include <regex>
+#include <vector>
+using namespace std::string_literals ;
+
+std::string handleRest( const std::string & rest ) {
+ std::string result ;
+ char dash = '-' ;
+ int len = static_cast<int>( 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<std::string> & 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<int>( reduced.length( ) ) ;
+ if ( len <= 4 ) {
+ std::cout << handleRest( reduced ) << '\n' ;
+ }
+ else {
+ std::vector<std::string> 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 ;
+}
|
