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
Это часть ассемблерной программы, которая принимает часть кода ассемблера, превращает ее в двоичные команды, а затем вводит ее в другую написанную мной программу, которая умеет читать и выполнять двоичные команды.
Как насчет этого:
#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
для файла
См. Здесь
Похоже, что вы очень близки к этому:
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;
}