Как сохранить значение строки?

Эй, ребята, у меня есть вопрос о переменных и заявлениях If.

Причина, по которой я спрашиваю, заключается в том, что я назначаю токены в векторе строк переменным, но если в моем векторе только 3 элемента, и я пытаюсь присвоить переменную myVector (5), я получаю ошибку.

Это мое решение этой проблемы

std::string element5;
if(myVector.size () >= 4)
(
std::string element5 = myVector.at(4)
}

Но что не изменит строку вне оператора if? Мой код работает нормально, если у меня ровно 5 элементов и нет проверки ошибок, но если я передаю стандартный ввод, я действительно не знаю, сколько всего элементов, все, что я буду знать, это то, что максимум 50 элементов.

Мне не нужно выводить какие-либо элементы, просто запустите этот код на каждом

if(countSubstring(element5,"a") > 0)
{
a = a + 1
}

тогда я бы вывел.

как заставить element5 сохранить новую строку?

-2

Решение

проблема

Ваш код здесь переопределяет вашу переменную element5:

std::string element5;
if(myVector.size () >= 4)
(
std::string element5 = myVector.at(4)
}

Здесь вы впервые заявляете element5 после первой строки, а затем вы повторно объявите его на третьей строке в вашем if заявление. Это по существу «воссоздает» переменную element5 для этой сферы {}, И тогда, конечно, popизданный сразу после объема. Так что вы не увидите изменений в element5 если вы попытаетесь распечатать его из области видимости.

Решение

Легко, просто не объявляйте свою переменную заново, и все готово! Вот так:

std::string element5;
if(myVector.size () >= 4)
(
element5 = myVector.at(4)
}

Почему это происходит?

Как я уже сказал, внизу на уровне сборки переменная получает pushed, а затем внезапно, когда он переходит на другой уровень и эта же переменная повторно объявляется, о глобальной переменной забывают. И как только сфера действия заканчивается:

{
//This is a scope
}

повторно объявленная переменная получает popсошел со стека, и у нас есть наш оригинальный element5 обратно! Это уйдет element5 в том же положении, так как вы на самом деле не изменили его;).

Неопределенное поведение (UB)

Не ссылаться на объект вне области видимости; не делай этого!

C ++: ссылка на "выходит за рамки" объект

Рекомендации

Что происходит, когда ссылка на C ++ выходит за рамки?

Что происходит в C ++, когда я передаю объект по ссылке, и он выходит из области видимости?

глоссарий

объем: «Контейнер», в котором в данный момент выполняется программа; например, давайте возьмем это:

int main() {
//1st scope
if (true) {
//2nd scope
{
//third scope
}
}
}

Неопределенное поведение (UB):
Когда в не определено/неизвестный состояние в любое время, указанное во время компиляции. Компилятор делает все, что захочет, что делает его очень опасным поведением, особенно если вы пишете большой проект! Вот хороший вопрос / ответ на эту тему:

https://softwareengineering.stackexchange.com/questions/99692/philosophy-behind-undefined-behavior

8

Другие решения

Вы переопределяете строку внутри оператора if, вы не должны этого делать, потому что вы хотите использовать строку, которая была объявлена ​​ранее.

Так что просто замени std::string element5 = myVector.at(4) с element5 = myVector.at(4)

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector