Поиск персонажа из книги на C ++ - PullRequest
1 голос
/ 18 марта 2020

У меня проблема с тем, что мне нужно найти символ из книги, и я должен указать его местоположение:

page n, line x, character y

Когда мы достигаем новую страницу, номер строки должен быть сброшен до 0 и начните снова, поэтому:

page n+1, line 0, character y

Пока я использую три цикла for:

Outter for-loop: navigate through the characters that I need to find
Middle for-loop: navigate through the lines
Inner for-loop: navigate through the characters in the lines in the book 
                that I need to find the characters in

Единственный способ, которым я могу думать, - это подсчитать число '/ f 'Символы подачи формы, которые я определяю, чтобы получить номер страницы, а затем каким-то образом сбрасываем номер строки обратно до 0 и снова начинаем считать. Я запутался в том, как это реализовать, так как знаю, что вы не можете сбросить счетчик l oop.

Я застрял в логи c, как это сделать? Или мне нужно начинать свою программу заново, чтобы попробовать другой метод. Извините, я не могу дать больше подробностей, я весь день пробовал и пробовал эту ошибку и не мог найти способ обойти это. Я действительно не хочу стереть все и попробовать еще раз. .

Ниже приведен пример кода программы, пытающейся найти фразу "hello world" в файле book.txt, содержащем:

he is a man of his
'\f'word. From another 
lord he was a godlike
'\f' figure 

Моя текущая программа:

#include <iostream>     // Basic I/O
#include <string>       // string classes
#include <fstream>      // file stream classes
#include <sstream>      // string stream classes
#include <vector>

using namespace std;

// version 0
int main(int argc, char* argv[]) {

    ifstream book;
    ifstream message;
    vector<char> mContent;

    int pageCount = 0;

    if (argc != 3) {
        cout << "Error: Incorrect number of arguments.";
        return EXIT_FAILURE;
    }
    else if (argc == 3) {
        book.open(argv[1]);
        message.open(argv[2]);
    }
    vector<size_t> randPage;
    vector<string> line = {""};

    size_t i = 0;


    while (getline(book, line[i])) {

        line.push_back(line[i]);
        cout << i << ". " << line[i];

        i++;
    }

    char ch;
    while (message.get(ch)) {
        mContent.push_back(ch);
    }

    vector<char> letter;
    vector<size_t> randLine;
    vector<size_t> randChar;
    size_t o = 0;
    for (vector<char>::iterator m = mContent.begin(); m != mContent.end(); ++m) {
        for (size_t w = 0; w < line.size(); ++w) {

            for (size_t n = 0; n < line[w].size(); ++n) {

                if(n>0)
                if (*m == line[w].at(n)) {

                    letter.push_back(*m);
                    if (line[w].find(12) != string::npos)
                        randLine.push_back(w - w);
                    else
                        randLine.push_back(w);
                    randChar.push_back(n);
                }
            }
        }
    }
    for (size_t q = 0; q < letter.size(); ++q) {



cout << "\n q" << q << " Letter: " << letter[q] << " can be found in   line  " << randLine[q] << " at column: " << randChar[q] << " page: " << pageCount;

    }


    book.close();
    message.close();
    return 0;

}

Пример вывода:

 q0 Letter: h can be found in line  0 at column: 0 page: 0
 q1 Letter: h can be found in line  0 at column: 15 page: 0
 q2 Letter: h can be found in line  1 at column: 16 page: 0
 q3 Letter: h can be found in line  2 at column: 5 page: 0
 q4 Letter: e can be found in line  0 at column: 1 page: 0
 q5 Letter: e can be found in line  1 at column: 17 page: 0
 q6 Letter: e can be found in line  2 at column: 6 page: 0
 q7 Letter: e can be found in line  2 at column: 20 page: 0
 q8 Letter: e can be found in line  3 at column: 7 page: 0
 q9 Letter: l can be found in line  2 at column: 0 page: 0
 q10 Letter: l can be found in line  2 at column: 17 page: 0
 q11 Letter: l can be found in line  2 at column: 0 page: 0
 q12 Letter: l can be found in line  2 at column: 17 page: 0
 q13 Letter: o can be found in line  0 at column: 12 page: 0
 q14 Letter: o can be found in line  1 at column: 2 page: 0
 q15 Letter: o can be found in line  1 at column: 9 page: 0
 q16 Letter: o can be found in line  1 at column: 14 page: 0
 q17 Letter: o can be found in line  2 at column: 1 page: 0
 q18 Letter: o can be found in line  2 at column: 15 page: 0

...

...