void cleanSlashes(string &str)
{
- string::const_iterator i;
string out;
- for(i=str.begin();i!=str.end();++i) {
- if(*i=='/' && i!=str.begin() && *(i-1)=='/')
- continue;
- out.append(1,*i);
+ bool keepNextSlash = true;
+ for (const auto& value : str) {
+ if (value == '/') {
+ if (keepNextSlash) {
+ keepNextSlash = false;
+ }
+ else {
+ continue;
+ }
+ }
+ else {
+ keepNextSlash = true;
+ }
+ out.append(1, value);
}
- str=out;
+ str = std::move(out);
}
-
bool IpToU32(const string &str, uint32_t *ip)
{
if(str.empty()) {
BOOST_CHECK_EQUAL(out, "12 34 56 78 90 ab cd ef ");
}
+BOOST_AUTO_TEST_CASE(test_CleanSlashes) {
+ auto cleanSlashesWrapper = [](const char* str) {
+ std::string fullStr(str);
+ cleanSlashes(fullStr);
+ return fullStr;
+ };
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("/test"), "/test");
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("//test"), "/test");
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("///test"), "/test");
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("/test/"), "/test/");
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("//test/"), "/test/");
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("//test//"), "/test/");
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("///test//"), "/test/");
+ BOOST_CHECK_EQUAL(cleanSlashesWrapper("test///"), "test/");
+}
+
BOOST_AUTO_TEST_SUITE_END()