С++ Вывести строки с файла [закрыт]

163
11 мая 2019, 22:30

С++

В файле записаны 3 строки. Я знаю номер 3-ей строки "num".

Задача: вывести на экран из файла строку с номером num, строку num-1 и строку num-2.

#include "pch.h"
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
int main(){
ifstream file("file.txt");
string find,s; int k=0;
 cin >> find;  // ввод строки которую нужно найти в файле
  //узнаю номер этой  нужной строки в файле
    while (find != s) {
            getline(file, s);
            k++;
}
//запись из файла в массив, правильно ли я делаю?
 string L[100];
        int i = 0;
        while (getline(file, s)) {
                L[i]=s;
                i++;
    }
//вывожу нужные строки   
   for (int i = k - 2; i < k; i++) {
             cout << L[i];
    }
getch();
}
/*
Вывод должен быть таким:
1. выводится строка с файла с номером k-2
2. выводится строка с файла с номером k-1
3. Выводится строка введенная с клавиатуры (find) с номером k
*/
Answer 1

И вот Вам вариант с вектором (с минимумом изменений):

#include "pch.h"
#include <iostream>
#include <fstream>
#include <conio.h>
#include <string>
#include <vector>
using namespace std;
int main(){
ifstream file("file.txt");
string find,s; int k=0;
 cin >> find;  // ввод строки которую нужно найти в файле
  //узнаю номер этой  нужной строки в файле
    while (find != s) {
            getline(file, s);
            k++;
}

file.seekg (0);
//запись из файла в массив, правильно ли я делаю?
//   string L[100];
vector <string> L;
        int i = 0;
        while (getline(file, s)) {
               // L[i]=s;
               L.push_back(s);
    }
//вывожу нужные строки   
   for (int i = k - 3; i < k; i++) {
             cout << L[i] << endl;
    }
getch();
}

Что напрашивается из улучшений?

  1. Делать размер вектора сразу равным k строк.
  2. Считывать в вектор только k строк, а не весь файл.
READ ALSO
Метод прямоугольника не параллелится

Метод прямоугольника не параллелится

Здравствуйте пишу простой алгоритм численного метода (прямоугольника)Распараллелил эту функцию с помощью OpenMP

158
Почему stoi выдает ошибку invalid_argument?

Почему stoi выдает ошибку invalid_argument?

Вот фрагмент кода одной из функцийПри первом вызове все проходит на ура

125
Бесконечный цикл в clang, в gcc - работает

Бесконечный цикл в clang, в gcc - работает

Решили добавить тесты для компилятора clang помимо gccВ итоге в одной функции получаем бесконечный цикл, и в минимальном примере размер карты...

146