Запись информации в конце каждой строки файла в C++
Я хочу написать программу, которая читает выражения после исправления из файла, каждое выражение после исправления находится в строке, программа затем оценивает выражение после исправления и затем записывает результат рядом с каждой строкой.
Это выглядит примерно так:
информация о файле:
1 2 +
9 3 *
после оценки после исправления: файл выглядит так:
1 2 + 3
9 3 * 27
где дополнительный номер является результатом оценки после исправления. Я закончил оценку после исправления, но, похоже, не знаю, как записать их в конец каждой строки.
У кого-нибудь есть идея, как я могу этого достичь?
2 ответа
Использовать std:ifstream
чтобы открыть входной файл, и std::ofstream
открыть отдельный выходной файл. Тогда используйте std::getline()
в цикле для чтения строк из входного файла, обработки каждой строки и записи ее в std::ofstream
наряду с его результатом. Когда цикл завершен, вы можете закрыть потоки и заменить входной файл выходным файлом, если это необходимо.
#include <fstream>
#include <string>
std::ifstream in("input.txt");
std::ifstream out("output.txt");
std::string line;
while (std::getline(in, line))
{
if (!line.empty())
{
out << line;
// process line as needed...
out << " " << result;
}
out << "\n";
}
in.close();
out.close();
// replace input.txt with output.txt, if needed...
Я предполагаю, что в вашем коде не будет скобок, и все числа будут положительными целыми числами, разделенными операторами или пробелами.
Используйте структуру данных стека. (Если вы не знаете, что это такое, это структура данных с двумя операциями, называемыми pop и push, вам следует прочитать об этом, если вы никогда не слышали об этом раньше).
Всякий раз, когда вы читаете цифру, продолжайте читать, пока не найдете не цифру. Все цифры, которые вы сейчас читаете, составляют целое число. Вставьте это целое число в стек.
Повторяйте, пока не прочитаете оператор (+, -, *, /)
Как только вы прочитаете оператор, примените этот оператор к двум последним значениям в стеке и поместите результат в стек.
Это то, как математика делается внутри компиляторов.
После того, как вы завершили строку, проверьте, есть ли только одно значение в стеке. Если нет, это означает, что в инструкциях есть несовпадающее число целых чисел и операторов. Если есть только один номер, запишите его в файл.
РЕДАКТИРОВАТЬ: вероятно, будет лучше, если вы создадите новый файл для вывода (и, если необходимо, переименуйте его в имя входного файла в конце)
Затем прочитайте каждую строку из входного файла и вставьте ее и результат в выходной файл.