diff options
-rw-r--r-- | hkutil/string.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/hkutil/string.h b/hkutil/string.h new file mode 100644 index 0000000..f8264ac --- /dev/null +++ b/hkutil/string.h | |||
@@ -0,0 +1,87 @@ | |||
1 | #ifndef UTIL_H_CED7A66D | ||
2 | #define UTIL_H_CED7A66D | ||
3 | |||
4 | #include <algorithm> | ||
5 | #include <string> | ||
6 | #include <iterator> | ||
7 | #include <cctype> | ||
8 | #include <sstream> | ||
9 | |||
10 | namespace hatkirby { | ||
11 | |||
12 | inline std::string uppercase(std::string in) | ||
13 | { | ||
14 | std::string result; | ||
15 | |||
16 | std::transform( | ||
17 | std::begin(in), | ||
18 | std::end(in), | ||
19 | std::back_inserter(result), | ||
20 | [] (char ch) | ||
21 | { | ||
22 | return std::toupper(ch); | ||
23 | }); | ||
24 | |||
25 | return result; | ||
26 | } | ||
27 | |||
28 | template <class InputIterator> | ||
29 | std::string implode( | ||
30 | InputIterator first, | ||
31 | InputIterator last, | ||
32 | std::string delimiter) | ||
33 | { | ||
34 | std::stringstream result; | ||
35 | |||
36 | for (InputIterator it = first; it != last; it++) | ||
37 | { | ||
38 | if (it != first) | ||
39 | { | ||
40 | result << delimiter; | ||
41 | } | ||
42 | |||
43 | result << *it; | ||
44 | } | ||
45 | |||
46 | return result.str(); | ||
47 | } | ||
48 | |||
49 | template <class OutputIterator> | ||
50 | void split( | ||
51 | std::string input, | ||
52 | std::string delimiter, | ||
53 | OutputIterator out) | ||
54 | { | ||
55 | while (!input.empty()) | ||
56 | { | ||
57 | int divider = input.find(delimiter); | ||
58 | if (divider == std::string::npos) | ||
59 | { | ||
60 | *out = input; | ||
61 | out++; | ||
62 | |||
63 | input = ""; | ||
64 | } else { | ||
65 | *out = input.substr(0, divider); | ||
66 | out++; | ||
67 | |||
68 | input = input.substr(divider+delimiter.length()); | ||
69 | } | ||
70 | } | ||
71 | } | ||
72 | |||
73 | template <class Container> | ||
74 | Container split( | ||
75 | std::string input, | ||
76 | std::string delimiter) | ||
77 | { | ||
78 | Container result; | ||
79 | |||
80 | split(input, delimiter, std::back_inserter(result)); | ||
81 | |||
82 | return result; | ||
83 | } | ||
84 | |||
85 | }; | ||
86 | |||
87 | #endif /* end of include guard: UTIL_H_CED7A66D */ | ||