Могу ли я иметь вектор внутри строки?

0

Это мой код:

//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" был просто примером, но реальность такова, что она никогда не будет одной и той же строкой.

Любая помощь очень признательна, чтобы решить мою проблему.

  • 1
    сначала вы устанавливаете i в location-1 , затем вы увеличиваете i . Это не кажется правильным. Могу ли я предложить использовать отладчик и пошагово бросить ваш код, чтобы посмотреть, выполняет ли он то, что вы ожидаете.
  • 0
    @ sp2danny location устанавливается путем чтения его из inData . Без проверки ошибок, но это уже другая история.
Показать ещё 3 комментария
Теги:

1 ответ

4
Лучший ответ
for (int x = 0; x <= spaces.size(); x++)
                   ^ problem is here

Индексы в массивы, строки, векторы и т.д. Всегда нумеруются от 0 до size-1, включительно, но ваш цикл for обращается к вектору size, один за концом вектора. Это приводит к неопределенному поведению: в этом случае - к сбою.

Измените его на < вместо.

  • 0
    Вы спасатель жизни !!!!! Первоначально у меня было это как массив, как сказал нам наш учитель, но он не работал должным образом, поэтому я просто прочитал сегодня вечером векторы, чтобы у меня не было полного понимания того, как они работают. Куча проб и ошибок. Таким образом, я также должен был сделать местоположение -2 вместо -1. Огромное спасибо.
  • 0
    должен подождать 2 минуты, прежде чем я смогу принять ваш ответ

Ещё вопросы

Сообщество Overcoder
Наверх
Меню