Add removeStringEnd()

This commit is contained in:
Perttu Ahola 2012-03-25 12:48:14 +03:00
parent 26666bb36f
commit e71262463f
2 changed files with 21 additions and 0 deletions

@ -35,6 +35,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "mapsector.h" #include "mapsector.h"
#include "settings.h" #include "settings.h"
#include "log.h" #include "log.h"
#include "utility_string.h"
/* /*
Asserts that the exception occurs Asserts that the exception occurs
@ -120,6 +121,11 @@ struct TestUtilities
assert(is_yes("YeS") == true); assert(is_yes("YeS") == true);
assert(is_yes("") == false); assert(is_yes("") == false);
assert(is_yes("FAlse") == false); assert(is_yes("FAlse") == false);
const char *ends[] = {"abc", "c", "bc", NULL};
assert(removeStringEnd("abc", ends) == "");
assert(removeStringEnd("bc", ends) == "b");
assert(removeStringEnd("12c", ends) == "12");
assert(removeStringEnd("foo", ends) == "");
} }
}; };

@ -31,5 +31,20 @@ static inline std::string padStringRight(std::string s, size_t len)
return s; return s;
} }
// ends: NULL- or ""-terminated array of strings
// Returns "" if no end could be removed.
static inline std::string removeStringEnd(const std::string &s, const char *ends[])
{
const char **p = ends;
for(; (*p) && (*p)[0] != '\0'; p++){
std::string end = *p;
if(s.size() < end.size())
continue;
if(s.substr(s.size()-end.size(), end.size()) == end)
return s.substr(0, s.size() - end.size());
}
return "";
}
#endif #endif