{"id":15047230,"url":"https://github.com/martinmoene/string-lite","last_synced_at":"2025-04-10T00:50:57.693Z","repository":{"id":147527530,"uuid":"336547849","full_name":"martinmoene/string-lite","owner":"martinmoene","description":"String facilities for C++98 and later - a library in search of its identity.","archived":false,"fork":false,"pushed_at":"2022-12-07T09:45:04.000Z","size":111,"stargazers_count":22,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-04-10T00:50:55.073Z","etag":null,"topics":["cpp","cpp98","string-manipulation"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/martinmoene.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-06T13:47:04.000Z","updated_at":"2024-07-29T03:07:33.000Z","dependencies_parsed_at":null,"dependency_job_id":"7ec472c3-fa06-4eb7-950e-d94c36d5106a","html_url":"https://github.com/martinmoene/string-lite","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fstring-lite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fstring-lite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fstring-lite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/martinmoene%2Fstring-lite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/martinmoene","download_url":"https://codeload.github.com/martinmoene/string-lite/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248137999,"owners_count":21053775,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","cpp98","string-manipulation"],"created_at":"2024-09-24T20:55:20.475Z","updated_at":"2025-04-10T00:50:57.672Z","avatar_url":"https://github.com/martinmoene.png","language":"C++","readme":"# string lite: string facilities for C++98 and later (In Progress)\n\n[![Language](https://img.shields.io/badge/C%2B%2B-98/11/14/17/20-blue.svg)](https://en.wikipedia.org/wiki/C%2B%2B#Standardization) [![License](https://img.shields.io/badge/license-BSL-blue.svg)](https://opensource.org/licenses/BSL-1.0) [![Build Status](https://github.com/martinmoene/string-lite/actions/workflows/ci.yml/badge.svg)](https://github.com/martinmoene/string-lite/actions/workflows/ci.yml) [![Build Status](https://travis-ci.org/martinmoene/string-lite.svg?branch=master)](https://travis-ci.org/martinmoene/string-lite) [![Build status](https://ci.appveyor.com/api/projects/status/1ha3wnxtam547m8p?svg=true)](https://ci.appveyor.com/project/martinmoene/string-lite) [![Version](https://badge.fury.io/gh/martinmoene%2Fstring-lite.svg)](https://github.com/martinmoene/string-lite/releases) [![download](https://img.shields.io/badge/latest-download-blue.svg)](https://github.com/martinmoene/string-lite/blob/master/include/nonstd/string.hpp) [![Conan](https://img.shields.io/badge/on-conan-blue.svg)](https://conan.io/center/string-lite) [![Try it on wandbox](https://img.shields.io/badge/on-wandbox-blue.svg)](https://wandbox.org/) [![Try it on godbolt online](https://img.shields.io/badge/on-godbolt-blue.svg)](https://godbolt.org/)\n\n**Contents**  \n\n- [Example usage](#example-usage)\n- [In a nutshell](#in-a-nutshell)\n- [License](#license)\n- [Dependencies](#dependencies)\n- [Installation and use](#installation-and-use)\n- [Synopsis](#synopsis)\n- [Notes and references](#notes-and-references)\n- [Appendix](#appendix)\n\n## Example usage\n\n```cpp\n// Use nonstd::string's split():\n\n#include \"nonstd/string.hpp\"\n#include \u003ciostream\u003e\n#include \u003csstream\u003e\n#include \u003cstring\u003e\n#include \u003cvector\u003e\n\ntemplate\u003c typename T \u003e\nstd::string contents(std::vector\u003cT\u003e const \u0026 coll)\n{\n    // using to_string() for nonstd::string::string_view:\n\n    std::stringstream os;\n    for ( auto const \u0026 elem : coll )\n        os \u003c\u003c \"'\" \u003c\u003c to_string(elem) \u003c\u003c \"', \";\n    return os.str();\n}\n\ntemplate\u003c typename T \u003e\nstd::ostream \u0026 operator\u003c\u003c(std::ostream \u0026 os, std::vector\u003cT\u003e const \u0026 coll )\n{\n    return os \u003c\u003c \"[\" \u003c\u003c contents(coll) \u003c\u003c \"]\";\n}\n\nint main()\n{\n    std::cout \u003c\u003c nonstd::string::split(\"Hello, world\", \",\");\n}\n```\n\n### Compile and run\n\n```bash\nprompt\u003e g++ -std=c++98 -Wall -I../include -o 01-basic.exe 01-basic.cpp \u0026\u0026 01-basic.exe\n['Hello', ' world', ]\n```\n\n## In a nutshell\n\n**string lite** is a single-file header-only library to provide various string algorithms. Firstly meant to get you up and running easily, not necessarily to provide everything that might be useful and in the most efficient manner.\n\nCreating *string lite* I've had a look at the [C++ standard](https://eel.is/c++draft/#strings), [Boost](https://www.boost.org/doc/libs/1_60_0/doc/html/string_algo.html), [Facebook Folly](https://github.com/facebook/folly/blob/master/folly/String.h), the [Python standard library](https://docs.python.org/3/library/string.html), the [proposal for `std::split()`](http://wg21.link/n3593) and several algorithms I created over time.\n\n**Features and properties of string lite** are ease of installation (single header), freedom of dependencies other than the standard library.\n\n## License\n\n*string lite* is distributed under the [Boost Software License](https://github.com/martinmoene/bit-lite/blob/master/LICENSE.txt).\n\nNote: this repository contains a copy of several files from the [CsString library by Ansel Sermersheim and Barbara Geller](https://github.com/copperspice/cs_string) for testing purposes. The CsString library is released under the BSD 2-clause license. \n\n## Dependencies\n\n*string lite* has no other dependencies than the [C++ standard library](http://en.cppreference.com/w/cpp/header).\n\n## Installation and use\n\n*string lite* is a single-file header-only library. Put `string.hpp` in the [include](include) folder directly into the project source tree or somewhere reachable from your project.\n\n## Synopsis\n\n**Contents**  \n[Documentation of *string lite*](#documentation-of-string-lite)  \n[Configuration](#configuration)  \n\n### Documentation of *string lite*\n\n| Kind               | Type or function                            | Notes |\n|--------------------|---------------------------------------------|-------|\n| **Type**           | **literal_delimiter**                       | a single string |\n| \u0026nbsp;             | **any_of_delimiter**                        | any of given characters |\n| \u0026nbsp;             | **fixed_delimiter**                         | fixed length |\n| \u0026nbsp;             | **limit_delimiter**                         | not implemented |\n| \u0026nbsp;             | **regex_delimiter**                         | regular expression |\n| \u0026nbsp;             | **char_delimiter**                          | character position |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| **Utilities**      | CharT **nullchr**()                         | null char of template type |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | size_t **size**(CharT \\* s)                 | C-string, [w,u16,u32]char |\n| \u0026nbsp;             | size_t **size**(CollT \u0026 c)                  | collection, C++ string |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | CharT \\* **begin**(CharT \\* c)              | iterator to C-string |\n| \u0026nbsp;             | CharT \\* **end**(CharT \\* c)                | iterator past C-string |\n| \u0026nbsp;             | CharT const \\* **cbegin**(CharT \\* c)       | const iterator to C-string |\n| \u0026nbsp;             | CharT const \\* **cend**(CharT \\* c)         | const iterator past C-string |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | IterT **begin**(CollT \u0026 c)                  | collection, C++ string |\n| \u0026nbsp;             | IterT **end**(CollT \u0026 c)                    | collection, C++ string |\n| \u0026nbsp;             | IterT **cbegin**(CollT \u0026 c)                 | collection, C++ string |\n| \u0026nbsp;             | IterT **cend**(CollT \u0026 c)                   | collection, C++ string |\n| \u0026nbsp;             | IterT **rbegin**(CollT \u0026 c)                 | collection, C++ string |\n| \u0026nbsp;             | IterT **rend**(CollT \u0026 c)                   | collection, C++ string |\n| \u0026nbsp;             | IterT **crbegin**(CollT \u0026 c)                | collection, C++ string |\n| \u0026nbsp;             | IterT **crend**(CollT \u0026 c)                  | collection, C++ string |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | std::basic_string\u0026lt;\u0026gt;\u003cbr\u003e**to_string**(basic_string_view\u0026lt;\u0026gt; v)                      |\u0026nbsp;|\n| \u0026nbsp;             | std::basic_string\u0026lt;\u0026gt;\u003cbr\u003e**to_string**(basic_string_view\u0026lt;\u0026gt; v, Allocator const \u0026 a) |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | CharT const \\*\u003cbr\u003e**to_identity**(CharT const \\* s)                       |\u0026nbsp;|\n| \u0026nbsp;             | basic_string\u0026lt;\u0026gt;\u003cbr\u003e**to_identity**(basic_string\u0026lt;\u0026gt; const \u0026 s)   |\u0026nbsp;|\n| \u0026nbsp;             | basic_string_view\u0026lt;\u0026gt;\u003cbr\u003e**to_identity**(basic_string_view\u0026lt;\u0026gt; v) |std::string_view |\n| \u0026nbsp;             | basic_string\u0026lt;\u0026gt;\u003cbr\u003e**to_identity**(basic_string_view\u0026lt;\u0026gt; v)      |nonstd::string_view |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| **Observers**      | bool **is_empty**(CharT \\* s)               | C-string is empty |\n| \u0026nbsp;             | bool **is_empty**(StringT const \u0026 s)        | string is empty |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | bool **contains**(StringT const \u0026 s, CharT chr)              | string contains chr |\n| \u0026nbsp;             | bool **contains**(StringT const \u0026 s, SubT const \u0026 substr)    | string contains substring |\n| \u0026nbsp;             | bool **contains**(StringT const \u0026 s, std::regex const \u0026 substr) | string contains reg. expr. |\n| \u0026nbsp;             | bool **contains_re**(StringT const \u0026 s, ReT const \u0026 re)      | string contains reg. expr. |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | bool **starts_with**(StringT const \u0026 s, CharT chr)           | string starts with chr |\n| \u0026nbsp;             | bool **starts_with**(StringT const \u0026 s, SubT const \u0026 substr) | string starts with substring |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | bool **ends_with**(StringT const \u0026 s, CharT chr)             | string ends with chr |\n| \u0026nbsp;             | bool **ends_with**(StringT const \u0026 s, SubT const \u0026 substr)   | string ends with substring |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| **Searching**      | IterT **find_first**(StringT \u0026 s, SubT const \u0026 substr)       | iterator to substring |\n| \u0026nbsp;             | IterT **find_first**(StringT const \u0026 s, SubT const \u0026 substr) | const iterator to substring |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | IterT **find_last**(StringT \u0026 s, SubT const \u0026 substr)        | iterator to substring |\n| \u0026nbsp;             | IterT **find_last**(StringT const \u0026 s, SubT const \u0026 substr)  | const iterator to substring |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| **Modifiers**      | CharT \\* **clear**(CharT \\* s)              | make C-string empty |\n| \u0026nbsp;             | StringT \u0026 **clear**(StringT \u0026 s)            | make string empty |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | CharT \\* **to_lowercase**(CharT \\* p)       | convert C-string to lowercase |\n| \u0026nbsp;             | CharT \\* **to_uppercase**(CharT \\* p)       | convert C-string to uppercase |\n| \u0026nbsp;             | StringT \u0026 **to_lowercase**(StringT \u0026 s)     | convert string to lowercase  |\n| \u0026nbsp;             | StringT \u0026 **to_uppercase**(StringT \u0026 s)     | convert string to uppercase  |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT **as_lowercase**(StringT const \u0026 s) | string converted to lowercase |\n| \u0026nbsp;             | StringT **as_uppercase**(StringT const \u0026 s) | string converted to uppercase |\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT \u0026 **replace_all**(StringT \u0026 s, FromT const \u0026 from, ToT const \u0026 to)        |\u0026nbsp;|\n| \u0026nbsp;             | StringT **replaced_all**(StringT const \u0026 s, FromT const \u0026 from, ToT const \u0026 to)   |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT \u0026 **replace_first**(StringT \u0026 s, FromT const \u0026 from, ToT const \u0026 to)      |\u0026nbsp;|\n| \u0026nbsp;             | StringT **replaced_first**(StringT const \u0026 s, FromT const \u0026 from, ToT const \u0026 to) |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT \u0026 **replace_last**(StringT \u0026 s, FromT const \u0026 from, ToT const \u0026 to)       |\u0026nbsp;|\n| \u0026nbsp;             | StringT **replaced_last**(StringT const \u0026 s, FromT const \u0026 from, ToT const \u0026 to)  |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | CharT \\* **trim_left**(CharT \\* s)                               |[\" \\\\t\\\\n\"]|\n| \u0026nbsp;             | CharT \\* **trim_left**(CharT \\* s, SetT const * set)             |\u0026nbsp;|\n| \u0026nbsp;             | StringT \u0026 **trim_left**(StringT \u0026 s)                             |\u0026nbsp;|\n| \u0026nbsp;             | StringT \u0026 **trim_left**(StringT \u0026 s, SetT const \u0026 set)           |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | CharT \\* **trim_right**(CharT \\* s)                              |\u0026nbsp;|\n| \u0026nbsp;             | CharT \\* **trim_right**(CharT \\* s, SetT const * set)            |\u0026nbsp;|\n| \u0026nbsp;             | StringT \u0026 **trim_right**(StringT \u0026 s)                            |\u0026nbsp;|\n| \u0026nbsp;             | StringT \u0026 **trim_right**(StringT \u0026 s, SetT const \u0026 set)          |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | CharT \\* **trim**(CharT \\* s)                                    |\u0026nbsp;|\n| \u0026nbsp;             | CharT \\* **trim**(CharT \\* s, SetT const * set)                  |\u0026nbsp;|\n| \u0026nbsp;             | StringT \u0026 **trim**(StringT \u0026 s)                                  |\u0026nbsp;|\n| \u0026nbsp;             | StringT \u0026 **trim**(StringT \u0026 s, SetT const \u0026 set)                |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT **trimmed_left**(StringT const \u0026 s)                      |\u0026nbsp;|\n| \u0026nbsp;             | StringT **trimmed_left**(StringT const \u0026 s, SetT const \u0026 set)    |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT **trimmed_right**(StringT const \u0026 s)                     |\u0026nbsp;|\n| \u0026nbsp;             | StringT **trimmed_right**(StringT const \u0026 s, SetT const \u0026 set)   |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT **trimmed**(StringT const \u0026 s)    |\u0026nbsp;|\n| \u0026nbsp;             | StringT **trimmed**(StringT const \u0026 s, SetT const \u0026 set)         |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| **Combining**      | CharT \\* **append**(CharT \\* s, TailT const \u0026 tail)              |\u0026nbsp;|\n| \u0026nbsp;             | StringT \u0026 **append**(StringT \u0026 s, TailT const \u0026 tail)            |\u0026nbsp;|\n| \u0026nbsp;             | StringT **appended**(StringT const \u0026 s, TailT const \u0026 tail)      |\u0026nbsp;|\n| \u0026nbsp;             | \u0026nbsp; | \u0026nbsp; |\n| \u0026nbsp;             | StringT **join**(Coll const \u0026 coll, SepT const \u0026 sep)            |\u0026nbsp;|\n| \u0026nbsp;             | std::vector\u0026lt;SViewT\u0026gt; **split**(SViewT text, Delimiter d)    | See delimiter types |\n| \u0026nbsp;             | std::vector\u0026lt;SViewT\u0026gt; **split**(SViewT text, char const * d) |\u0026nbsp;|\n\nNote: with `StringT const \u0026` the string type can also be `string_view`.\n\n### Configuration\n\n#### Tweak header\n\nIf the compiler supports [`__has_include()`](https://en.cppreference.com/w/cpp/preprocessor/include), *string lite* supports the [tweak header](https://vector-of-bool.github.io/2020/10/04/lib-configuration.html) mechanism. Provide your *tweak header* as `nonstd/string.tweak.hpp` in a folder in the include-search-path. In the tweak header, provide definitions as documented below, like `#define string_CPLUSPLUS 201103L`.\n\n#### Select internal string_view, `nonstd::string_view` or `std::string_view`\n\nAt default, *string lite* uses an internal `string_view`. You can however override this default and explicitly request to use  string-view lite's `nonstd::string_view` as `nonstd::string::string_view` or use C++17's `std::string_view` via the following macros.\n\n-D\u003cb\u003estring\\_CONFIG\\_SELECT\\_STRING_VIEW\u003c/b\u003e=string_CONFIG_SELECT_STRING_VIEW_INTERNAL \nDefine this to `string_CONFIG_SELECT_STRING_VIEW_NONSTD` to select `nonstd::string_view` as `nonstd::string::string_view`. Define this to `string_CONFIG_SELECT_STRING_VIEW_STD` to select `std::string_view` as `nonstd::string::string_view`. Default is undefined, which has the same effect as defining to `string_CONFIG_SELECT_STRING_VIEW_INTERNAL`.\n\n#### Standard selection macro\n\n\\-D\u003cb\u003estring\\_CPLUSPLUS\u003c/b\u003e=199711L  \nDefine this macro to override the auto-detection of the supported C++ standard, if your compiler does not set the `__cplusplus` macro correctly.\n\n#### Disable exceptions\n\n-D\u003cb\u003estring_CONFIG_NO_EXCEPTIONS\u003c/b\u003e=0\nDefine this to 1 if you want to compile without exceptions. If not defined, the header tries and detect if exceptions have been disabled (e.g. via `-fno-exceptions`). Default is undefined.\n\n## Notes and references\n\nTODO\n\n- [n3593 - std::split(): An algorithm for splitting strings](http://wg21.link/n3593). / https://isocpp.org/files/papers/n3593.html\n- [Martin Broadhurst. How to split a string in C++. 2016](http://www.martinbroadhurst.com/how-to-split-a-string-in-c.html).\n\nAppendix\n--------\n\n\u003ca id=\"a1\"\u003e\u003c/a\u003e\n### A.1 Compile-time information\n\nIn the test runner, the version of *string-lite* is available via tag `[.version]`. The following tags are available for information on the compiler and on the C++ standard library used: `[.compiler]`, `[.stdc++]`, `[.stdlanguage]` and `[.stdlibrary]`.\n\n\u003ca id=\"a2\"\u003e\u003c/a\u003e\n### A.2 *string-lite* test specification\n\n\u003cdetails\u003e\n\u003csummary\u003eclick to expand\u003c/summary\u003e\n\u003cp\u003e\n\n```\nstring: Setting Windows console to print utf8 characters[unicode][windows]\nis_empty: true if string is empty - char *\nis_empty: true if string is empty - string\ncontains: true if string contains sub string - string-char\ncontains: true if string contains sub string - string-char*\ncontains: true if string contains sub string - string-string\ncontains: true if string contains sub string - string-string_view\ncontains: true if string contains sub string - string_view-string_view\ncontains: true if string contains regular expression - string-std::regexp\ncontains_re: true if string contains regular expression - string-char*\ncontains_re: true if string contains regular expression - string-string\nstarts_with: true if string starts with sub string - string-char\nstarts_with: true if string starts with sub string - string-char*\nstarts_with: true if string starts with sub string - string-string\nstarts_with: true if string starts with sub string - string-string_view\nstarts_with: true if string starts with sub string - string_view-string_view\nends_with: true if string ends with sub string - string-char\nends_with: true if string ends with sub string - string-char*\nends_with: true if string ends with sub string - string-string\nends_with: true if string ends with sub string - string-string_view\nends_with: true if string ends with sub string - string_view-string_view\nfind_first: iterator to sub string in string - string-char*\nfind_first: iterator to sub string in string - string-string\nfind_first: iterator to sub string in string - string-string_view\nfind_first: iterator to sub string in string_view - string_view-string_view\nfind_last: iterator to sub string in string - string-char*\nfind_last: iterator to sub string in string - string-string\nfind_last: iterator to sub string in string - string-string_view\nfind_last: iterator to sub string in string_view - string_view-string_view\nclear: Makes string empty - char *\nclear: Makes string empty - string\nreplace_all: Change all occurrences of sub string - string-char*\nreplace_all: Change all occurrences of sub string - string-string\nreplace_all: Change all occurrences of sub string - string-string_view\nreplaced_all: Return new string with all occurrences of sub string changed - char*-char*\nreplaced_all: Return new string with all occurrences of sub string changed - string-string\nreplaced_all: Return new string with all occurrences of sub string changed - string-string_view\nreplaced_all: Return new string with all occurrences of sub string changed - string_view-string_view [TODO]\nreplace_first: Change the first occurrence of sub string - char*-char*[TODO]\nreplace_first: Change the first occurrence of sub string - string-char*\nreplace_first: Change the first occurrence of sub string - string-string\nreplace_first: Change the first occurrence of sub string - string-string_view\nreplace_first: Change the first occurrence of sub string - string_view-string_view\nreplaced_first: Return new string with first occurrence of sub string changed - char*-char*\nreplaced_first: Return new string with first occurrence of sub string changed - string-string\nreplaced_first: Return new string with first occurrence of sub string changed - string-string_view\nreplaced_first: Return new string with first occurrence of sub string changed - string_view-string_view [TODO]\nreplace_last: Change the first occurrence of sub string - char*-char*[TODO]\nreplace_last: Change the last occurrence of sub string - string-char*\nreplace_last: Change the last occurrence of sub string - string-string\nreplace_last: Change the last occurrence of sub string - string-string_view\nreplace_last: Change the last occurrence of sub string - string_view-string_view\nreplaced_last: Return new string with last occurrence of sub string changed - char*-char*\nreplaced_last: Return new string with last occurrence of sub string changed - string-string\nreplaced_last: Return new string with last occurrence of sub string changed - string-string_view\nreplaced_last: Return new string with last occurrence of sub string changed - string_view-string_view [TODO]\nto_lowercase: Makes string lowercase - char *\nto_uppercase: Makes string uppercase - char *\nto_lowercase: Makes string lowercase - string\nto_uppercase: Makes string uppercase - string\nas_lowercase: Return new string in lowercase - string\nas_uppercase: Return new string in uppercase - string\nappend: Append a string to a string in-place - char*-char* - Note: be careful!\nappend: Append a string to a string in-place - string-char*\nappend: Append a string to a string in-place - string-string\nappend: Append a string to a string in-place - string-string_view\nappended: Return new string with second string appended to first string - string-char*\nappended: Return new string with second string appended to first string - string-string\nappended: Return new string with second string appended to first string - string-string_view\ntrim_left: Remove characters in set from left of string [\" \\t\\n\"] - in-place - C-string\ntrim_left: Remove characters in set from left of string [\" \\t\\n\"] - in-place - std::string\ntrim_right: Remove characters in set from right of string [\" \\t\\n\"] - in-place - char*\ntrim_right: Remove characters in set from right of string [\" \\t\\n\"] - in-place - string\ntrim: Remove characters in set from left and right of string [\" \\t\\n\"] - in-place - char*\ntrim: Remove characters in set from left and right of string [\" \\t\\n\"] - in-place - string\ntrimmed_left: Remove characters in set from left of string [\" \\t\\n\"] - copy - string\ntrimmed_right: Remove characters in set from right of string [\" \\t\\n\"] - copy - string\ntrimmed: Remove characters in set from left and right of string [\" \\t\\n\"] - copy - string\nstring_view: ...[TODO]\njoin: Join strings from collection into a string separated by given separator\nsplit: Split string into vector of string_view given delimiter - literal_delimiter\nsplit: Split string into vector of string_view given delimiter - literal_delimiter\nsplit: Split string into vector of string_view given delimiter - literal_delimiter\nsplit: Split string into vector of string_view given delimiter - literal_delimiter\nsplit: Split string into vector of string_view given delimiter - literal_delimiter\nsplit: Split string into vector of string_view given delimiter - any_of_delimiter\nsplit: Split string into vector of string_view given delimiter - fixed_delimiter\nsplit: Split string into vector of string_view given delimiter - regex_delimiter\nsplit: Split string into vector of string_view given delimiter - char_delimiter\nsplit: Split string into single characters given empty delimiter\nclear: Makes string empty - string [unicode]\ntweak header: Reads tweak header if supported [tweak]\n```\n\n\u003c/p\u003e\n\u003c/details\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinmoene%2Fstring-lite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmartinmoene%2Fstring-lite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmartinmoene%2Fstring-lite/lists"}