Это мой код:
//Declare variables for location of spaces
int i = 0;
char ignore;
vector<int> spaces;
int location;
int x = 0;
//Begin finding the spaces
while (!inData.eof())
{
inData >> location;
i = location - 1;
i++;
spaces.push_back(i);
inData >> ignore;
}
for (int x = 0; x <= spaces.size(); x++)
{
output[spaces[x]] = ' ';
}
Это не полный код, а тот, где возникает проблема.
Вывод - это строка слов, которые зашифрованы. Мой вектор содержит места, где пробелы расположены в строке, и поэтому я использую эти числа в векторе, чтобы заменить буквы пробелом.
Чтобы лучше объяснить, у меня было зашифрованное слово, и я уже перевел письма туда, где они должны быть. output = "HellopWorldqBye"
Пространства расположены в позициях 5
и 11
. Вектор содержит эти числа.
output[spaces[x]] = ' '
должен заменить эти буквы пробелами, чтобы сделать output = "Hello World Bye"
но вместо этого он сбрасывает программу.
Я не могу понять, что моя проблема будет, а не потому, что вектор находится внутри массива?
Единственный другой способ, которым я знаю, как это сделать, не сворачивая мою программу, - это сохранить места в пространстве внутри массива и работать, но тогда я должен объявить размер моего массива, а также сделать цикл цикла <= точный размер массива, иначе он сработает, и количество пробелов в выходной строке никогда не будет одинаковым, если кто-то каждый раз вводит 3 слова. "Hello World Bye"
был просто примером, но реальность такова, что она никогда не будет одной и той же строкой.
Любая помощь очень признательна, чтобы решить мою проблему.
for (int x = 0; x <= spaces.size(); x++)
^ problem is here
Индексы в массивы, строки, векторы и т.д. Всегда нумеруются от 0
до size-1
, включительно, но ваш цикл for обращается к вектору size
, один за концом вектора. Это приводит к неопределенному поведению: в этом случае - к сбою.
Измените его на <
вместо.
i
вlocation-1
, затем вы увеличиваетеi
. Это не кажется правильным. Могу ли я предложить использовать отладчик и пошагово бросить ваш код, чтобы посмотреть, выполняет ли он то, что вы ожидаете.location
устанавливается путем чтения его изinData
. Без проверки ошибок, но это уже другая история.