Почему substr работает странно?

У меня есть функция, которая нужна для "парсинга" строки. Она должна определить значение условной переменной, на вход дается строка, имеющая вид вроде
std::string var = "VAR = 'hello'";
Я определяю позицию кавычек:
const size_t variable_value_start = var.find("'");

if (variable_value_start == std::string::npos)
        return;

 const size_t variable_value_end = var.find("'", variable_value_start + 1);

Что работает вполне адекватно, я проверял (Дает верные индексы). Но после того, как я пытаюсь создать итоговое значение
std::string variable_value = var.substr(variable_value_start + 1, variable_value_end - 1);

Оно по какой то причине дает мне
hello'
Последняя кавычка ни в какую не хочет убираться, не могу понять, в чем дело
  • Вопрос задан
  • 148 просмотров
Решения вопроса 3
0xD34F
@0xD34F
Всё работает так, как и должно. Вы не знаете, за что отвечает второй параметр у метода substr. Откройте документацию, и разберитесь.
Ответ написан
Комментировать
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Потому что читайте документацию. substr принимает начало и длину подстроки, а не конец.

Соответственно, надо делать вот так:
std::string variable_value = var.substr(variable_value_start + 1, variable_value_end - variable_value_start - 1);
Ответ написан
Комментировать
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Последняя кавычка ни в какую не хочет убираться, не могу понять, в чем дело
std::string variable_value = var.substr(variable_value_start + 1, variable_value_end - 1);

Второй параметр std::string::substr -- это длина выделяемой подстроки, а не индекс конца.
Должно быть
std::string variable_value = var.substr(variable_value_start + 1,
                                        variable_value_end - variable_value_start - 1);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы