Я пытаюсь обрезать белые пространства от начала и конца строк на моей карте.Почему мои значения std :: map не изменены?
код не удается 3 тестов:
#include <map>
#include <string>
void blanksOut(std::map<int, std::string> & data)
{
for (auto p : data) {
std::string p1 = p.second;
size_t first = p1.find_first_not_of(' ');
p1 = p1.erase(0, first);
size_t last = p1.find_last_not_of(' ');
p1.resize(last + 1);
p.second = p1;
}
}
int main()
{
std::map<int, std::string> m;
m[2] = "foo";
m[3] = " bar";
m[5] = " baz ";
m[8] = "quux ";
blanksOut(m);
return(m[2] != "foo")
+ (m[3] != "bar")
+ (m[5] != "baz")
+ (m[8] != "quux");
}
только один, который проходит первый один, где не требуется никаких изменений. Что я делаю не так?
Пожалуйста, отредактируйте ваш вопрос, чтобы предоставить [mcve] и * clear problem statement *. –
Я ошибочно ответил, что 'string p1 = p.second;' должно быть 'string & p1 = p.second;' потому что я не смог увидеть инструкцию 'p.second = p1;'. Однако использование ссылки по-прежнему представляется более подходящим (но не решением проблемы) – stefaanv
* Обрезка пробелов на строках на карте * - Что убеждает вас в том, что код работает, если вы не использовали карту? Почему бы не написать простую функцию, которая берет строку и удаляет конечное и конечное пустое пространство и забывает о картах на данный момент? – PaulMcKenzie