Перебирая строки в векторе и удаляя пробелы

0
void getWords()
{
    string line;
    for (int i=0; i<assemb.size(); i++)
    {
        for (int word=0; word<assemb.at(i).size(); word++)
        {
            if (assemb.at(i).at(word) != ' ')
            {
                  getline(cin,line);
            }       

        } 
        fixedWords.push_back(line);
    }
}

Я пытаюсь пропустить этот вектор строк и удалить символы, которые не являются пробелами, и добавить их в другой вектор, в моей голове эта функция должна работать, но, похоже, она не попадает в какой-то цикл.

Слова, которые в настоящий момент распечатываются как:

          VAR 0       
START:    LDN NUM01   
          SUB NUM02   
          STO MYSUM   
          LDN MYSUM   
          STO MYSUM   
END:      STP         
NUM01:    VAR 1025    
NUM02:    VAR 621     
MYSUM:    VAR 0 

Однако я хочу, чтобы они были:

-Var0
-Start:
-LDN
-NUM01
-SUB 
-NUM02
-STO
-MYSUM
-LDN
-MYSUM
-STO
-MYSUM
-END:
-STP
-NUM01
-VAR
-1025
-NUM02
-VAR
-621
-MYSUM
-0

Это часть ассемблерной программы, которая принимает часть кода ассемблера, превращает ее в двоичные команды, а затем вводит ее в другую написанную мной программу, которая умеет читать и выполнять двоичные команды.

  • 0
    Пожалуйста, измените, если это мое изменение неверно
  • 0
    Нет, это именно то, что я хотел, спасибо.
Теги:
string
vector

2 ответа

0
Лучший ответ

Как насчет этого:

#include <iostream>
#include<vector>
#include<algorithm>
#include<iterator>
//#include<fstream>

using namespace std;

int main() {

std::vector<std::string> vec;
// std::ifstream fin("input.txt");
std::copy(std::istream_iterator<std::string>(std::cin), //fin
             std::istream_iterator<std::string>(),
             std::back_inserter(vec));

for(auto v:vec)
   std::cout<<"-"<<v<<std::endl;
return 0;
}

Замените std::cin на std::ifstream для файла

См. Здесь

0

Похоже, что вы очень близки к этому:

std::copy(std::istream_iterator<std::string>(std::cin), 
          std::istream_iterator<std::string>(),
          std::ostream_iterator<std::string>(std::cout, "\n"));

Единственное отличие состоит в том, что это не добавляет - в начале каждой строки. Для этого вместо copy можно использовать transform:

#include <string>
#include <algorithm>
#include <iostream>
#include <iterator>

int main() {
    std::transform(std::istream_iterator<std::string>(std::cin),
        std::istream_iterator<std::string>(),
        std::ostream_iterator<std::string>(std::cout, "\n"),
        [](std::string const &in) { return "-" + in; });
    return 0;
}

Ещё вопросы

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