Skip to content

Commit cba806e

Browse files
author
Jesse
committed
fixed leading space on get<std::string>
1 parent 15999ae commit cba806e

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

argparse.h

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ class ArgumentParser {
9595
size_t slen = std::strlen(argv[i]);
9696
if (slen == 0) {
9797
continue;
98-
} else if (slen >= 2 && argv[i][0] == '-' && !isnumber(argv[i], slen)) {
98+
} else if (slen >= 2 && argv[i][0] == '-' &&
99+
!_is_number(argv[i], slen)) {
99100
push_arg();
100101
if (i == argc - 1) {
101102
name = &(argv[i][1]);
@@ -221,7 +222,20 @@ class ArgumentParser {
221222
_trim(s, f);
222223
return s;
223224
}
224-
static inline bool isnumber(const char *arg, size_t len) {
225+
template <typename InputIt>
226+
inline std::string _join(InputIt begin, InputIt end,
227+
const std::string &separator = " ") {
228+
std::ostringstream ss;
229+
if (begin != end) {
230+
ss << *begin++;
231+
}
232+
while (begin != end) {
233+
ss << separator;
234+
ss << *begin++;
235+
}
236+
return ss.str();
237+
}
238+
static inline bool _is_number(const char *arg, size_t len) {
225239
if (std::isdigit(arg[0])) {
226240
return true;
227241
} else if (len >= 2) {
@@ -253,9 +267,7 @@ inline std::string ArgumentParser::get<std::string>(const std::string &name) {
253267
if (_pairs.find(t) != _pairs.end()) t = _pairs[t];
254268
auto v = _variables.find(t);
255269
if (v != _variables.end()) {
256-
return std::accumulate(
257-
v->second.begin(), v->second.end(), std::string(),
258-
[](std::string a, std::string b) { return a + " " + b; });
270+
return _join(v->second.begin(), v->second.end());
259271
}
260272
return "";
261273
}

example.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,12 +50,13 @@ int main(int argc, char* argv[]) {
5050
std::copy(v.begin(), v.end(), std::ostream_iterator<double>(std::cout, " "));
5151
double sum = 0;
5252
for (auto& d : v) sum += d;
53-
std::cout << " sum: " << sum << std::endl;
53+
std::cout << "sum: " << sum << std::endl;
5454
auto f = parser.getv<std::string>("files");
5555
std::cout << "files: ";
5656
std::copy(f.begin(), f.end(),
5757
std::ostream_iterator<std::string>(std::cout, " | "));
5858
std::cout << std::endl;
59+
std::cout << parser.get<std::string>("files") << std::endl;
5960
f = parser.getv<std::string>("");
6061
std::cout << "free args: ";
6162
std::copy(f.begin(), f.end(),

0 commit comments

Comments
 (0)