Улучшение функции чтения в C ++ для чтения нескольких файлов - PullRequest
0 голосов
/ 11 октября 2018

У меня есть небольшое улучшение, я делаю свою машину Тьюринга, она читает параметры из txt-файла, а затем выполняет ленту в терминале.Я хочу сделать так, чтобы он читал из нескольких текстовых файлов и затем выполнял несколько лент.Поскольку я новичок в программировании, мне трудно понять, должен ли я использовать потоки или делать несколько функций чтения, а потом помещать параметры в цикл while, может быть, кто-то может дать мне совет?

Вот функция чтения

void reader(int &head, string &tape, string a[N][n])
{
    ifstream df;
    df.open("samples/1.txt");
    df >> head;
    df >> tape;
    rule = tape.size(); // how many symbols we have in our line
    for (int i = 0; i < N; i++)
        if (df >> a[i][0])
        {
            for (int j = 1; j < n; j++)
            {
                df >> a[i][j];
            }
        }
        else
        {
            length = i; //how many lines of rules we have
            i = N;
        }
    df.close();
}

А пока цикл

while (d != "X")
{
    for (int y = 0; y < length; y++)
        if ((d == a[y][0]) && (p == a[y][1]))
        {
            tape[position] = a[y][2][0];
            if (a[y][3] == "L") // if string equals L (or R) it switches/moves
                position--;
            else
                position++;
            p = tape[position];
            d = a[y][4];
            y = length;
        }
    for (int j = 0; j < rule; j++)
    {
        cout << tape[j];
        //Sleep(1);
    }
    cout << endl;
    system("CLS");
}

1 Ответ

0 голосов
/ 11 октября 2018

C ++ std :: thread Документация довольно проста.Вот как вы можете достичь этого.

#include <string>
#include <thread>
#include <vector>

using namespace std;

void doStuff(std::string fileName)
{
    // call your file reading and trigger the Turing Machine.
}

int main()
{
    vector<string> fileNames = {"file1.txt", "file2.txt"};
    vector<thread> threads;

    for ( string fileName : fileNames)
        threads.push_back(thread(doStuff, fileName)); // start a thread to run doStuff() with fileName as the argument.

    for (auto t : threads)
        t.join();

}

Вы можете настроить чтение файла, чтобы использовать fileName в doStuff() соответственно.

...