Skip to content

Commit 989afce

Browse files
committed
Add capitalize()
1 parent c89c125 commit 989afce

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ The following table presents types, values and simplified, short prototypes of t
129129
|   | char_t **to_uppercase**(char_t chr) | character transformed to uppercase |
130130
|   | string **to_lowercase**(string_view sv) | string transformed to lowercase |
131131
|   | string **to_uppercase**(string_view sv) | string transformed to uppercase |
132+
|   | string **capitalize**(string_view sv) | string transformed to start with capital |
132133
|   | string **substring**(string_view sv, size_t pos \[, size_t count\]); | substring starting at given position of given length, default up to end |
133134
|   | string **strip**(string_view sv, string_view set) | string with characters given in set stripped from left and right |
134135
|   | string **strip_left**(string_view sv, string_view set) | string with characters given in set stripped from left |

include/nonstd/string.hpp

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,7 @@ string_nodiscard std::size_t find_first( std17::basic_string_view<CharT> text, S
937937
namespace string {
938938
namespace detail {
939939

940-
// Transform case (character):
940+
// Transform case (character):
941941

942942
template< typename CharT >
943943
string_nodiscard CharT to_lowercase( CharT chr )
@@ -967,8 +967,22 @@ string_nodiscard std::basic_string<CharT> to_case( std::basic_string<CharT> text
967967
} // namespace detail
968968
} // namespace string
969969

970-
// to_lowercase()
971-
// to_uppercase()
970+
// capitalize():
971+
972+
#define string_MK_CAPITALIZE(CharT) \
973+
string_nodiscard inline std::basic_string<CharT> \
974+
capitalize( std17::basic_string_view<CharT> text ) \
975+
{ \
976+
if ( text.empty() ) \
977+
return {}; \
978+
\
979+
std::basic_string<CharT> result{ to_string( text ) }; \
980+
result[0] = to_uppercase( result[0] ); \
981+
\
982+
return result; \
983+
}
984+
985+
// to_lowercase(), to_uppercase():
972986

973987
// template string_nodiscard std::basic_string<CharT> to_lowercase( std17::basic_string_view<CharT> text ) string_noexcept;
974988

@@ -1674,6 +1688,7 @@ string_MK_TO_CASE_CHAR ( char, lowercase )
16741688
string_MK_TO_CASE_CHAR ( char, uppercase )
16751689
string_MK_TO_CASE_STRING ( char, lowercase )
16761690
string_MK_TO_CASE_STRING ( char, uppercase )
1691+
string_MK_CAPITALIZE ( char )
16771692
string_MK_JOIN ( char )
16781693
string_MK_SPLIT_DELIM ( char )
16791694
string_MK_SPLIT_STRING ( char )
@@ -1714,6 +1729,7 @@ string_MK_TO_CASE_CHAR ( wchar_t, lowercase )
17141729
string_MK_TO_CASE_CHAR ( wchar_t, uppercase )
17151730
string_MK_TO_CASE_STRING ( wchar_t, lowercase )
17161731
string_MK_TO_CASE_STRING ( wchar_t, uppercase )
1732+
string_MK_CAPITALIZE ( wchar_t )
17171733
string_MK_JOIN ( wchar_t )
17181734
string_MK_SPLIT_DELIM ( wchar_t )
17191735
string_MK_SPLIT_STRING ( wchar_t )
@@ -1754,6 +1770,7 @@ string_MK_TO_CASE_CHAR ( char8_t, lowercase )
17541770
string_MK_TO_CASE_CHAR ( char8_t, uppercase )
17551771
string_MK_TO_CASE_STRING ( char8_t, lowercase )
17561772
string_MK_TO_CASE_STRING ( char8_t, uppercase )
1773+
string_MK_CAPITALIZE ( char8_t )
17571774
string_MK_JOIN ( char8_t )
17581775
string_MK_SPLIT_DELIM ( char8_t )
17591776
string_MK_SPLIT_STRING ( char8_t )
@@ -1794,6 +1811,7 @@ string_MK_TO_CASE_CHAR ( char16_t, lowercase )
17941811
string_MK_TO_CASE_CHAR ( char16_t, uppercase )
17951812
string_MK_TO_CASE_STRING ( char16_t, lowercase )
17961813
string_MK_TO_CASE_STRING ( char16_t, uppercase )
1814+
string_MK_CAPITALIZE ( char16_t )
17971815
string_MK_JOIN ( char16_t )
17981816
string_MK_SPLIT_DELIM ( char16_t )
17991817
string_MK_SPLIT_STRING ( char16_t )
@@ -1834,6 +1852,7 @@ string_MK_TO_CASE_CHAR ( char32_t, lowercase )
18341852
string_MK_TO_CASE_CHAR ( char32_t, uppercase )
18351853
string_MK_TO_CASE_STRING ( char32_t, lowercase )
18361854
string_MK_TO_CASE_STRING ( char32_t, uppercase )
1855+
string_MK_CAPITALIZE ( char32_t )
18371856
string_MK_JOIN ( char32_t )
18381857
string_MK_SPLIT_DELIM ( char32_t )
18391858
string_MK_SPLIT_STRING ( char32_t )
@@ -1874,6 +1893,7 @@ string_MK_SPLIT_LEFT_STRING( char32_t )
18741893
#undef string_MK_TO_CASE_CHAR
18751894
#undef string_MK_TO_CASE_STRING
18761895
#undef string_MK_TO_CASE_STRING
1896+
#undef string_MK_CAPITALIZE
18771897
#undef string_MK_JOIN
18781898
#undef string_MK_SPLIT_DELIM
18791899
#undef string_MK_SPLIT_STRING

test/string.t.cpp

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1281,7 +1281,15 @@ CASE( "find_last_not_of: position of character in set in string - string_view-st
12811281

12821282
// Modifiers:
12831283

1284-
// to_lowercase(), to_uppercase:
1284+
// capitalize():
1285+
1286+
CASE( "capitalize: Return string starting with capital - string" )
1287+
{
1288+
EXPECT( capitalize("hello, world!") == "Hello, world!" );
1289+
EXPECT( capitalize("Hello, world!") == "Hello, world!" );
1290+
}
1291+
1292+
// to_lowercase(), to_uppercase():
12851293

12861294
CASE( "to_lowercase: Return char in lowercase - char" )
12871295
{

0 commit comments

Comments
 (0)