Чтение файлов в программу

0

Я пытаюсь написать программу, которая: -reads текстовый файл, затем помещает его в строку -change каждую букву в строке путем вычитания 4 -outputs измененных строк

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

Спасибо!

// Lab 10
// programmed by Elijah

#include <iostream>
#include <string>
#include <fstream>
using namespace std;


int main()
{
    fstream dataFile;
//Set the file "coded" as the line input
    dataFile.open("coded.txt", ios::in);

//Create the file "plain2" as program output
    dataFile.open("plain2.txt", ios::out);

}
Теги:
input
output
file-handling

2 ответа

1
Лучший ответ
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main()
{
    ifstream inFile ("coded.txt"); //explicitly input using ifstream rather than fstream
    ofstream outFile ("plain2.txt"); //explicitly output using ofstream rather than fstream
    string str = "";
    char ch;
    while (inFile.get(ch))
    {
        if (ch!='\n' && ch!=' ')
        {
            //do your manipulation stuff //manipulate the string one character at a time as the characters are added     
        }str.push_back(ch); //treat the string as an array or vector and use push_back(ch) to append ch to str
    }
}

Это более явно открывает поток входных и выходных файлов, а затем создает пустую строку и унифицированный символ. inFile.get(ch) вернет true, пока он не находится в конце файла и назначит следующий символ ch. Затем внутри цикла вы можете делать все, что вам нужно делать с ch. Я просто добавил его в строку, но похоже, что вы захотите что-то сделать до добавления.

В вашем случае get (ch) будет лучше, чем метод getline() или >>, потому что get (ch) также добавит пробелы и вкладки и другой специальный символ, которые являются частью файла, который getline() и >> будет игнорировать.

Если по строке-4 вы имеете в виду символы, которые на линии манипуляции на 4 меньше, вы можете использовать:

ch = ch-4;

Обратите внимание, что это может дать результаты, отличающиеся от ожидаемых, если ch первоначально был "a", "b", "c" или "d". Если вы хотите, чтобы обертка использовала ascii-манипуляцию и оператор modulo (%).

  • 0
    Спасибо, это прекрасно работает! Один вопрос: есть ли способ сохранить разрывы строк, включенные в исходный файл ввода?
  • 0
    Если вы имеете в виду переводы строки, я думаю, что они будут сохранены в ch, как и любой другой символ. Если нет, пожалуйста, уточните
Показать ещё 1 комментарий
0

Вы переписываете свой файл данных, поэтому вам нужно либо создать второй fstream либо сначала обработать строки, а затем использовать один и тот же fstream для вывода.
Чтение строк:
http://www.cplusplus.com/reference/string/string/getline/
Изменение строки:
http://www.cplusplus.com/reference/string/string/replace/ И что вы имеете в виду под "String-4"?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню