tlx
Loading...
Searching...
No Matches
ends_with.cpp
Go to the documentation of this file.
1
/*******************************************************************************
2
* tlx/string/ends_with.cpp
3
*
4
* Part of tlx - http://panthema.net/tlx
5
*
6
* Copyright (C) 2007-2019 Timo Bingmann <tb@panthema.net>
7
*
8
* All rights reserved. Published under the Boost Software License, Version 1.0
9
******************************************************************************/
10
11
#include <
tlx/string/ends_with.hpp
>
12
13
#include <algorithm>
14
#include <cstring>
15
16
#include <
tlx/string/to_lower.hpp
>
17
18
namespace
tlx
{
19
20
/******************************************************************************/
21
22
bool
ends_with
(
const
char
* str,
const
char
* match) {
23
size_t
str_size = 0, match_size = 0;
24
while
(*str != 0)
25
++str, ++str_size;
26
while
(*match != 0)
27
++match, ++match_size;
28
if
(match_size > str_size)
29
return
false
;
30
31
while
(match_size != 0) {
32
--str, --match, --match_size;
33
if
(*str != *match)
return
false
;
34
}
35
return
true
;
36
}
37
38
bool
ends_with
(
const
char
* str,
const
std::string& match) {
39
size_t
str_size = 0, match_size = match.size();
40
while
(*str != 0)
41
++str, ++str_size;
42
if
(match_size > str_size)
43
return
false
;
44
45
std::string::const_iterator m = match.end();
46
while
(m != match.begin()) {
47
--str, --m;
48
if
(*str != *m)
return
false
;
49
}
50
return
true
;
51
}
52
53
bool
ends_with
(
const
std::string& str,
const
char
* match) {
54
size_t
str_size = str.size(), match_size = strlen(match);
55
if
(match_size > str_size)
56
return
false
;
57
58
std::string::const_iterator s = str.end() - match_size;
59
while
(*match != 0) {
60
if
(*s != *match)
return
false
;
61
++s, ++match;
62
}
63
return
true
;
64
}
65
66
bool
ends_with
(
const
std::string& str,
const
std::string& match) {
67
if
(match.size() > str.size())
68
return
false
;
69
70
return
std::equal(match.begin(), match.end(), str.end() - match.size());
71
}
72
73
/******************************************************************************/
74
75
bool
ends_with_icase
(
const
char
* str,
const
char
* match) {
76
size_t
str_size = 0, match_size = 0;
77
while
(*str != 0)
78
++str, ++str_size;
79
while
(*match != 0)
80
++match, ++match_size;
81
if
(match_size > str_size)
82
return
false
;
83
84
while
(match_size != 0) {
85
--str, --match, --match_size;
86
if
(
to_lower
(*str) !=
to_lower
(*match))
return
false
;
87
}
88
return
true
;
89
}
90
91
bool
ends_with_icase
(
const
char
* str,
const
std::string& match) {
92
size_t
str_size = 0, match_size = match.size();
93
while
(*str != 0)
94
++str, ++str_size;
95
if
(match_size > str_size)
96
return
false
;
97
98
std::string::const_iterator m = match.end();
99
while
(m != match.begin()) {
100
--str, --m;
101
if
(
to_lower
(*str) !=
to_lower
(*m))
return
false
;
102
}
103
return
true
;
104
}
105
106
bool
ends_with_icase
(
const
std::string& str,
const
char
* match) {
107
size_t
str_size = str.size(), match_size = strlen(match);
108
if
(match_size > str_size)
109
return
false
;
110
111
std::string::const_iterator s = str.end() - match_size;
112
while
(*match != 0) {
113
if
(
to_lower
(*s) !=
to_lower
(*match))
return
false
;
114
++s, ++match;
115
}
116
return
true
;
117
}
118
119
bool
ends_with_icase
(
const
std::string& str,
const
std::string& match) {
120
if
(match.size() > str.size())
121
return
false
;
122
123
return
std::equal(match.begin(), match.end(), str.end() - match.size(),
124
[](
const
char
& c1,
const
char
& c2) {
125
return to_lower(c1) == to_lower(c2);
126
});
127
}
128
129
/******************************************************************************/
130
131
}
// namespace tlx
132
133
/******************************************************************************/
ends_with.hpp
tlx::ends_with
bool ends_with(const char *str, const char *match)
Checks if the given match string is located at the end of this string.
Definition
ends_with.cpp:22
tlx::to_lower
char to_lower(char ch)
Transform the given character to lower case without any localization.
Definition
to_lower.cpp:17
tlx
Definition
exclusive_scan.hpp:17
tlx::ends_with_icase
bool ends_with_icase(const char *str, const char *match)
Definition
ends_with.cpp:75
to_lower.hpp
tlx
string
ends_with.cpp
Generated on Sun Jan 19 2025 00:00:00 for tlx by
1.13.2