У меня проблема с тем, что мне нужно найти символ из книги, и я должен указать его местоположение:
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
...