Любая помощь по этому поводу будет оценена, поскольку я очень застрял.
Для этого проекта мы должны сначала получить входные данные из файла. Вот как выглядел бы файл:
----------------------------------------------------------------
Hi Then Finish
End Okay
----------------------------------------------------------------
Here is the layout for it:
Character Set 1: 1-6
Character Set 2: 7 (always a space)
Character Set 3: 8-11
Character Set 4: 12-13 (always 2 spaces)
Character Set 5: 14-19
Мне было интересно, есть ли способ получить определенное количество символов для строки. Также каждый из наборов символов будет иметь разные переменные.
Например: Набор символов 1 будет называться этикетки, набор 3 будет символьный код, и набор символов 5 будет операция.
Я попробовал что-то вроде
for (int i = 0; !text.eof(); i++){
getline(text, label[i]);
getline(text, code[i]);
getline(text, operation[i]);
}
Если это помогает, вот мой код на данный момент... хотя он работает неправильно:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main() {
const int MAX = 100;
string str;
string symLabel[MAX];
string opCode [MAX];
string operand [MAX];
ifstream sim("simprog.txt");
for (int i = 0; !sim.eof(); i++){
getline(sim, str);
symLabel[i] = str.substr(0, 6);
opCode[i] = str.substr(8,11);
operand[i] = str.substr(13, 18);
cout << symLabel[i] << endl;
cout << opCode[i] << endl;
}
}
Я изменил ваши массивы на вектор rec, где rec - это структура ваших строк с конструктором копирования, а оператор = добавлен, чтобы сделать его совместимым с контейнерами STL. Это не будет ограничивать вас определенным количеством строк ввода. Остальное - это всего лишь некоторые изменения в вашем коде.
struct rec
{
rec() { }
rec(const rec &r) { *this = r; }
rec &operator=(const rec &r)
{
if (this != &r)
{
symLabel = r.symLabel;
opCode = r.opCode;
operand = r.operand;
}
return *this;
}
std::string symLabel;
std::string opCode;
std::string operand;
};
int main(int argc, char *argv[])
{
std::string str;
std::vector<rec> records;
std::ifstream sim("simprog.txt");
char bf[100];
while(sim.good())
{
sim.getline(bf, sizeof(bf));
str = bf;
rec r;
r.symLabel = str.substr(0, 6);
r.opCode = str.substr(7, 5);
r.operand = str.substr(13, 6);
records.push_back(r);
}
for (size_t i=0; i< records.size(); i++)
{
std::cout << records[i].symLabel << std::endl;
std::cout << records[i].opCode << std::endl;
}
return 0;
}
Обратите внимание, что для этого требуется форматированный файл, как вы его указали. Если формат строки изменяется, или последняя строка неполна, вы попадаете в неприятности :)