384 lines
13 KiB
Markdown
384 lines
13 KiB
Markdown
[string.ops]
|
||
|
||
# 27 Strings library [[strings]](./#strings)
|
||
|
||
## 27.4 String classes [[string.classes]](string.classes#string.ops)
|
||
|
||
### 27.4.3 Class template basic_string [[basic.string]](basic.string#string.ops)
|
||
|
||
#### 27.4.3.8 String operations [string.ops]
|
||
|
||
#### [27.4.3.8.1](#string.accessors) Accessors [[string.accessors]](string.accessors)
|
||
|
||
[ð](#lib:c_str,basic_string)
|
||
|
||
`constexpr const charT* c_str() const noexcept;
|
||
constexpr const charT* data() const noexcept;
|
||
`
|
||
|
||
[1](#string.accessors-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4297)
|
||
|
||
*Returns*: A pointer p such that p + i == addressof(operator[](i)) for eachi in [0, size()][.](#string.accessors-1.sentence-1)
|
||
|
||
[2](#string.accessors-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4302)
|
||
|
||
*Complexity*: Constant time[.](#string.accessors-2.sentence-1)
|
||
|
||
[3](#string.accessors-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4306)
|
||
|
||
*Remarks*: The program shall not modify any of the values stored in the character array; otherwise, the behavior is undefined[.](#string.accessors-3.sentence-1)
|
||
|
||
[ð](#lib:data,basic_string_)
|
||
|
||
`constexpr charT* data() noexcept;
|
||
`
|
||
|
||
[4](#string.accessors-4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4317)
|
||
|
||
*Returns*: A pointer p such that p + i == addressof(operator[](i)) for eachi in [0, size()][.](#string.accessors-4.sentence-1)
|
||
|
||
[5](#string.accessors-5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4322)
|
||
|
||
*Complexity*: Constant time[.](#string.accessors-5.sentence-1)
|
||
|
||
[6](#string.accessors-6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4326)
|
||
|
||
*Remarks*: The program shall not modify the value stored at p + size() to any value other than charT(); otherwise, the behavior is undefined[.](#string.accessors-6.sentence-1)
|
||
|
||
[ð](#lib:operator_basic_string_view,basic_string)
|
||
|
||
`constexpr operator basic_string_view<charT, traits>() const noexcept;
|
||
`
|
||
|
||
[7](#string.accessors-7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4338)
|
||
|
||
*Effects*: Equivalent to:return basic_string_view<charT, traits>(data(), size());
|
||
|
||
[ð](#lib:get_allocator,basic_string)
|
||
|
||
`constexpr allocator_type get_allocator() const noexcept;
|
||
`
|
||
|
||
[8](#string.accessors-8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4350)
|
||
|
||
*Returns*: A copy of theAllocator object used to construct the string or, if that allocator has been replaced, a
|
||
copy of the most recent replacement[.](#string.accessors-8.sentence-1)
|
||
|
||
#### [27.4.3.8.2](#string.find) Searching [[string.find]](string.find)
|
||
|
||
[1](#string.find-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4360)
|
||
|
||
Let *F* be one offind, rfind, find_first_of, find_last_of,find_first_not_of, and find_last_not_of[.](#string.find-1.sentence-1)
|
||
|
||
- [(1.1)](#string.find-1.1)
|
||
|
||
Each member function of the formconstexpr size_type *F*(const basic_string& str, size_type pos) const noexcept; has effects equivalent to:return *F*(basic_string_view<charT, traits>(str), pos);
|
||
|
||
- [(1.2)](#string.find-1.2)
|
||
|
||
Each member function of the formconstexpr size_type *F*(const charT* s, size_type pos) const; has effects equivalent to:return *F*(basic_string_view<charT, traits>(s), pos);
|
||
|
||
- [(1.3)](#string.find-1.3)
|
||
|
||
Each member function of the formconstexpr size_type *F*(const charT* s, size_type pos, size_type n) const; has effects equivalent to:return *F*(basic_string_view<charT, traits>(s, n), pos);
|
||
|
||
- [(1.4)](#string.find-1.4)
|
||
|
||
Each member function of the formconstexpr size_type *F*(charT c, size_type pos) const noexcept; has effects equivalent to:return *F*(basic_string_view<charT, traits>(addressof(c), 1), pos);
|
||
|
||
[ð](#lib:find,basic_string_)
|
||
|
||
`template<class T>
|
||
constexpr size_type find(const T& t, size_type pos = 0) const noexcept(see below);
|
||
template<class T>
|
||
constexpr size_type rfind(const T& t, size_type pos = npos) const noexcept(see below);
|
||
template<class T>
|
||
constexpr size_type find_first_of(const T& t, size_type pos = 0) const noexcept(see below);
|
||
template<class T>
|
||
constexpr size_type find_last_of(const T& t, size_type pos = npos) const noexcept(see below);
|
||
template<class T>
|
||
constexpr size_type find_first_not_of(const T& t, size_type pos = 0) const noexcept(see below);
|
||
template<class T>
|
||
constexpr size_type find_last_not_of(const T& t, size_type pos = npos) const noexcept(see below);
|
||
`
|
||
|
||
[2](#string.find-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4429)
|
||
|
||
*Constraints*:
|
||
|
||
- [(2.1)](#string.find-2.1)
|
||
|
||
is_convertible_v<const T&, basic_string_view<charT, traits>> istrue and
|
||
|
||
- [(2.2)](#string.find-2.2)
|
||
|
||
is_convertible_v<const T&, const charT*> isfalse[.](#string.find-2.sentence-1)
|
||
|
||
[3](#string.find-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4440)
|
||
|
||
*Effects*: Let *G* be the name of the function[.](#string.find-3.sentence-1)
|
||
|
||
Equivalent to:basic_string_view<charT, traits> s = *this, sv = t;return s.*G*(sv, pos);
|
||
|
||
[4](#string.find-4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4449)
|
||
|
||
*Remarks*: The exception specification is equivalent tois_nothrow_convertible_v<const T&, basic_string_view<charT, traits>>[.](#string.find-4.sentence-1)
|
||
|
||
#### [27.4.3.8.3](#string.substr) basic_string::substr [[string.substr]](string.substr)
|
||
|
||
[ð](#lib:substr,basic_string)
|
||
|
||
`constexpr basic_string substr(size_type pos = 0, size_type n = npos) const &;
|
||
`
|
||
|
||
[1](#string.substr-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4463)
|
||
|
||
*Effects*: Equivalent to: return basic_string(*this, pos, n);
|
||
|
||
[ð](#lib:substr,basic_string_)
|
||
|
||
`constexpr basic_string substr(size_type pos = 0, size_type n = npos) &&;
|
||
`
|
||
|
||
[2](#string.substr-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4474)
|
||
|
||
*Effects*: Equivalent to: return basic_string(std::move(*this), pos, n);
|
||
|
||
[ð](#lib:subview,basic_string)
|
||
|
||
`constexpr basic_string_view<charT, traits> subview(size_type pos = 0, size_type n = npos) const;
|
||
`
|
||
|
||
[3](#string.substr-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4485)
|
||
|
||
*Effects*: Equivalent to: return basic_string_view<charT, traits>(*this).subview(pos, n);
|
||
|
||
#### [27.4.3.8.4](#string.compare) basic_string::compare [[string.compare]](string.compare)
|
||
|
||
[ð](#lib:compare,basic_string)
|
||
|
||
`template<class T>
|
||
constexpr int compare(const T& t) const noexcept(see below);
|
||
`
|
||
|
||
[1](#string.compare-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4499)
|
||
|
||
*Constraints*:
|
||
|
||
- [(1.1)](#string.compare-1.1)
|
||
|
||
is_convertible_v<const T&, basic_string_view<charT, traits>> istrue and
|
||
|
||
- [(1.2)](#string.compare-1.2)
|
||
|
||
is_convertible_v<const T&, const charT*> isfalse[.](#string.compare-1.sentence-1)
|
||
|
||
[2](#string.compare-2)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4510)
|
||
|
||
*Effects*: Equivalent to: return basic_string_view<charT, traits>(*this).compare(t);
|
||
|
||
[3](#string.compare-3)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4514)
|
||
|
||
*Remarks*: The exception specification is equivalent tois_nothrow_convertible_v<const T&, basic_string_view<charT, traits>>[.](#string.compare-3.sentence-1)
|
||
|
||
[ð](#lib:compare,basic_string_)
|
||
|
||
`template<class T>
|
||
constexpr int compare(size_type pos1, size_type n1, const T& t) const;
|
||
`
|
||
|
||
[4](#string.compare-4)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4527)
|
||
|
||
*Constraints*:
|
||
|
||
- [(4.1)](#string.compare-4.1)
|
||
|
||
is_convertible_v<const T&, basic_string_view<charT, traits>> istrue and
|
||
|
||
- [(4.2)](#string.compare-4.2)
|
||
|
||
is_convertible_v<const T&, const charT*> isfalse[.](#string.compare-4.sentence-1)
|
||
|
||
[5](#string.compare-5)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4538)
|
||
|
||
*Effects*: Equivalent to:return basic_string_view<charT, traits>(*this).substr(pos1, n1).compare(t);
|
||
|
||
[ð](#lib:compare,basic_string__)
|
||
|
||
`template<class T>
|
||
constexpr int compare(size_type pos1, size_type n1, const T& t,
|
||
size_type pos2, size_type n2 = npos) const;
|
||
`
|
||
|
||
[6](#string.compare-6)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4554)
|
||
|
||
*Constraints*:
|
||
|
||
- [(6.1)](#string.compare-6.1)
|
||
|
||
is_convertible_v<const T&, basic_string_view<charT, traits>> istrue and
|
||
|
||
- [(6.2)](#string.compare-6.2)
|
||
|
||
is_convertible_v<const T&, const charT*> isfalse[.](#string.compare-6.sentence-1)
|
||
|
||
[7](#string.compare-7)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4565)
|
||
|
||
*Effects*: Equivalent to:basic_string_view<charT, traits> s = *this, sv = t;return s.substr(pos1, n1).compare(sv.substr(pos2, n2));
|
||
|
||
[ð](#lib:compare,basic_string___)
|
||
|
||
`constexpr int compare(const basic_string& str) const noexcept;
|
||
`
|
||
|
||
[8](#string.compare-8)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4580)
|
||
|
||
*Effects*: Equivalent to:return compare(basic_string_view<charT, traits>(str));
|
||
|
||
[ð](#lib:compare,basic_string____)
|
||
|
||
`constexpr int compare(size_type pos1, size_type n1, const basic_string& str) const;
|
||
`
|
||
|
||
[9](#string.compare-9)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4592)
|
||
|
||
*Effects*: Equivalent to:return compare(pos1, n1, basic_string_view<charT, traits>(str));
|
||
|
||
[ð](#lib:compare,basic_string_____)
|
||
|
||
`constexpr int compare(size_type pos1, size_type n1, const basic_string& str,
|
||
size_type pos2, size_type n2 = npos) const;
|
||
`
|
||
|
||
[10](#string.compare-10)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4605)
|
||
|
||
*Effects*: Equivalent to:return compare(pos1, n1, basic_string_view<charT, traits>(str), pos2, n2);
|
||
|
||
[ð](#lib:compare,basic_string______)
|
||
|
||
`constexpr int compare(const charT* s) const;
|
||
`
|
||
|
||
[11](#string.compare-11)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4619)
|
||
|
||
*Effects*: Equivalent to:return compare(basic_string_view<charT, traits>(s));
|
||
|
||
[ð](#lib:compare,basic_string_______)
|
||
|
||
`constexpr int compare(size_type pos, size_type n1, const charT* s) const;
|
||
`
|
||
|
||
[12](#string.compare-12)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4631)
|
||
|
||
*Effects*: Equivalent to: return compare(pos, n1, basic_string_view<charT, traits>(s));
|
||
|
||
[ð](#lib:compare,basic_string________)
|
||
|
||
`constexpr int compare(size_type pos, size_type n1, const charT* s, size_type n2) const;
|
||
`
|
||
|
||
[13](#string.compare-13)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4642)
|
||
|
||
*Effects*: Equivalent to: return compare(pos, n1, basic_string_view<charT, traits>(s, n2));
|
||
|
||
#### [27.4.3.8.5](#string.starts.with) basic_string::starts_with [[string.starts.with]](string.starts.with)
|
||
|
||
[ð](#lib:starts_with,basic_string)
|
||
|
||
`constexpr bool starts_with(basic_string_view<charT, traits> x) const noexcept;
|
||
constexpr bool starts_with(charT x) const noexcept;
|
||
constexpr bool starts_with(const charT* x) const;
|
||
`
|
||
|
||
[1](#string.starts.with-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4657)
|
||
|
||
*Effects*: Equivalent to:return basic_string_view<charT, traits>(data(), size()).starts_with(x);
|
||
|
||
#### [27.4.3.8.6](#string.ends.with) basic_string::ends_with [[string.ends.with]](string.ends.with)
|
||
|
||
[ð](#lib:ends_with,basic_string)
|
||
|
||
`constexpr bool ends_with(basic_string_view<charT, traits> x) const noexcept;
|
||
constexpr bool ends_with(charT x) const noexcept;
|
||
constexpr bool ends_with(const charT* x) const;
|
||
`
|
||
|
||
[1](#string.ends.with-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4675)
|
||
|
||
*Effects*: Equivalent to:return basic_string_view<charT, traits>(data(), size()).ends_with(x);
|
||
|
||
#### [27.4.3.8.7](#string.contains) basic_string::contains [[string.contains]](string.contains)
|
||
|
||
[ð](#lib:contains,basic_string)
|
||
|
||
`constexpr bool contains(basic_string_view<charT, traits> x) const noexcept;
|
||
constexpr bool contains(charT x) const noexcept;
|
||
constexpr bool contains(const charT* x) const;
|
||
`
|
||
|
||
[1](#string.contains-1)
|
||
|
||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/strings.tex#L4693)
|
||
|
||
*Effects*: Equivalent to:return basic_string_view<charT, traits>(data(), size()).contains(x);
|