From 520414ca936b7b97530d0e9ebccb735a53fb93af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkovsky@mmg.fjfi.cvut.cz> Date: Thu, 9 Apr 2020 09:21:46 +0200 Subject: [PATCH] Added methods startsWith and endsWith to String --- src/TNL/String.h | 10 +++++++ src/TNL/String.hpp | 16 ++++++++++ src/UnitTests/StringTest.cpp | 58 +++++++++++++++++++++++++++++++++++- 3 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/TNL/String.h b/src/TNL/String.h index 228cb5bcb1..b0fb6644ce 100644 --- a/src/TNL/String.h +++ b/src/TNL/String.h @@ -342,6 +342,16 @@ class String * \include StringExampleSplit.out */ std::vector< String > split( const char separator = ' ', SplitSkip skipEmpty = SplitSkip::NoSkip ) const; + + /** + * \brief Checks if the string starts with given prefix. + */ + bool startsWith( const String& prefix ) const; + + /** + * \brief Checks if the string ends with given suffix. + */ + bool endsWith( const String& suffix ) const; }; /** diff --git a/src/TNL/String.hpp b/src/TNL/String.hpp index 3c38fe6b0c..64fae92cd5 100644 --- a/src/TNL/String.hpp +++ b/src/TNL/String.hpp @@ -223,6 +223,22 @@ String::split( const char separator, SplitSkip skip ) const return parts; } +inline bool +String::startsWith( const String& prefix ) const +{ + if( prefix.getSize() > getSize()) + return false; + return std::equal( prefix.begin(), prefix.end(), begin() ); +} + +inline bool +String::endsWith( const String& suffix ) const +{ + if( suffix.getSize() > getSize()) + return false; + return std::equal( suffix.rbegin(), suffix.rend(), rbegin() ); +} + inline String operator+( char string1, const String& string2 ) { return convertToString( string1 ) + string2; diff --git a/src/UnitTests/StringTest.cpp b/src/UnitTests/StringTest.cpp index aa2a64a19f..7447c1e6c2 100644 --- a/src/UnitTests/StringTest.cpp +++ b/src/UnitTests/StringTest.cpp @@ -317,7 +317,63 @@ TEST( StringTest, SaveLoad ) EXPECT_EQ( str1, str2 ); EXPECT_EQ( std::remove( TEST_FILE_NAME ), 0 ); -}; +} + +TEST( StringTest, startsWith ) +{ + String str( "abracadabra" ); + EXPECT_TRUE( str.startsWith( "a" ) ); + EXPECT_TRUE( str.startsWith( "ab" ) ); + EXPECT_TRUE( str.startsWith( "abr" ) ); + EXPECT_TRUE( str.startsWith( "abra" ) ); + EXPECT_TRUE( str.startsWith( "abrac" ) ); + EXPECT_TRUE( str.startsWith( "abraca" ) ); + EXPECT_TRUE( str.startsWith( "abracad" ) ); + EXPECT_TRUE( str.startsWith( "abracada" ) ); + EXPECT_TRUE( str.startsWith( "abracadab" ) ); + EXPECT_TRUE( str.startsWith( "abracadabr" ) ); + EXPECT_TRUE( str.startsWith( "abracadabra" ) ); + EXPECT_FALSE( str.startsWith( "b" ) ); + EXPECT_FALSE( str.startsWith( "aa" ) ); + EXPECT_FALSE( str.startsWith( "aba" ) ); + EXPECT_FALSE( str.startsWith( "abrb" ) ); + EXPECT_FALSE( str.startsWith( "abrad" ) ); + EXPECT_FALSE( str.startsWith( "abracb" ) ); + EXPECT_FALSE( str.startsWith( "abracaa" ) ); + EXPECT_FALSE( str.startsWith( "abracadb" ) ); + EXPECT_FALSE( str.startsWith( "abracadaa" ) ); + EXPECT_FALSE( str.startsWith( "abracadaba" ) ); + EXPECT_FALSE( str.startsWith( "abracadabrb" ) ); + EXPECT_FALSE( str.startsWith( "abracadabrab" ) ); +} + +TEST( StringTest, endsWith ) +{ + String str( "abracadabra" ); + EXPECT_TRUE( str.endsWith( "a" ) ); + EXPECT_TRUE( str.endsWith( "ra" ) ); + EXPECT_TRUE( str.endsWith( "bra" ) ); + EXPECT_TRUE( str.endsWith( "abra" ) ); + EXPECT_TRUE( str.endsWith( "dabra" ) ); + EXPECT_TRUE( str.endsWith( "adabra" ) ); + EXPECT_TRUE( str.endsWith( "cadabra" ) ); + EXPECT_TRUE( str.endsWith( "acadabra" ) ); + EXPECT_TRUE( str.endsWith( "racadabra" ) ); + EXPECT_TRUE( str.endsWith( "bracadabra" ) ); + EXPECT_TRUE( str.endsWith( "abracadabra" ) ); + EXPECT_FALSE( str.endsWith( "b" ) ); + EXPECT_FALSE( str.endsWith( "ba" ) ); + EXPECT_FALSE( str.endsWith( "ara" ) ); + EXPECT_FALSE( str.endsWith( "bbra" ) ); + EXPECT_FALSE( str.endsWith( "babra" ) ); + EXPECT_FALSE( str.endsWith( "bdabra" ) ); + EXPECT_FALSE( str.endsWith( "badabra" ) ); + EXPECT_FALSE( str.endsWith( "bcadabra" ) ); + EXPECT_FALSE( str.endsWith( "aacadabra" ) ); + EXPECT_FALSE( str.endsWith( "aracadabra" ) ); + EXPECT_FALSE( str.endsWith( "bbracadabra" ) ); + EXPECT_FALSE( str.endsWith( "babracadabra" ) ); +} #endif #include "main.h" -- GitLab