about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--hkutil/string.h87
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
10namespace 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 */