Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Пожалуйста помогите с задачей C++

Veronika Korsakova Ученик (77), на голосовании 1 неделю назад
Написана программа, которая состоит из двух функций: print_file (выводит содержимое файла) и main (выполняет основной код).

Задание: Напиши код для функции replace_text, чтобы она заменяла фрагмент текста файла на другой текст (см. секцию Входные данные).

Входные данные
На вход функции подаются
3
3 аргумента в таком порядке:

имя файла, который нужно открыть (параметр filename)
одна строка текста - тот текст, на который нужно заменить фрагмент текста файла (параметр text)
целое число - позиция исходного фрагмента текста файла (параметр pos)
Используй fstream, метод .seekg и оператор <<!

Подсказка
Содержимое файлов перед заменой
Имя файла Содержимое
Best-langs/c++.txt

Язык Python - лучший в мире!
Математика/Цифры.txt

123456789
Sample Input 1:

Best-langs/c++.txt
C++
9
Sample Output 1:

Язык C++ - лучший в мире!
Sample Input 2:

Математика/Цифры.txt
4321
5
Sample Output 2:

123454321
Напишите программу. Тестируется через stdin → stdout
Верно решили 194 учащихся
Из всех попыток 58% верных
Time Limit: 5 секунд
Memory Limit: 256 MB

C++
1
#include <iostream>
2
#include <string>
3
#include <fstream>
4
using namespace std;
5

6
// Функция для печати файла
7
// НЕ ИЗМЕНЯТЬ!
8
void print_file(string filename)
9
{
10
ifstream myfile(filename, ios::ate);
11

12
int size = myfile.tellg();
13
myfile.seekg(0);
14

15
char content[size];
16
myfile.read (content, size);
17

18
cout.write(content, size);
19
}
20

21
void replace_text(string filename, string text, int pos)
22
{
23
// Здесь будет твой код . . .
24
}
25

26
// НЕ ИЗМЕНЯТЬ!
27
int main()
28
{
29
// Ввод данных
30
string filename;
31
getline(cin, filename);
32

33
string text;
34
getline(cin, text);
35

36
int pos;
37
cin >> pos;
38

39
// Вызов твоей функции
40
replace_text(filename, text, pos);
41

42
// Вывод ответа
43
print_file(filename);
44
}
Голосование за лучший ответ
Unity 3D Гуру (3662) 1 месяц назад
Кидай код на пастебин, а ссылку сюда, я из этого месива ничего не пойму
Veronika KorsakovaУченик (77) 1 месяц назад
Задание: Напиши код для функции replace_text, чтобы она заменяла фрагмент текста файла на другой текст (см. секцию Входные данные).
Входные данные
На вход функции подаются
3
3 аргумента в таком порядке:
имя файла, который нужно открыть (параметр filename)
одна строка текста - тот текст, на который нужно заменить фрагмент текста файла (параметр text)
целое число - позиция исходного фрагмента текста файла (параметр pos)
Используй fstream, метод .seekg и оператор <<
Подсказка
Содержимое файлов перед заменой
Имя файла Содержимое
Best-langs/c++.txt
Язык Python - лучший в мире!
Математика/Цифры.txt
123456789
Sample Input 1:
Best-langs/c++.txt
C++
9
Sample Output 1:
Язык C++ - лучший в мире!
Sample Input 2:
Математика/Цифры.txt
4321
5
Sample Output 2:
123454321
1 литр энеоавлдввлталчлвлы Гуру (4582) 1 месяц назад
Вот пример реализации функции replace_text, которая заменяет фрагмент текста в файле на другой текст, начиная с заданной позиции. Для этого мы будем использовать fstream, метод .seekg() и оператор <<.
 #include <iostream> 
#include <string>
#include <fstream>

using namespace std;

// Функция для печати файла
void print_file(string filename) {
ifstream myfile(filename, ios::ate);
int size = myfile.tellg();
myfile.seekg(0);
char content[size];
myfile.read(content, size);
cout.write(content, size);
}

void replace_text(string filename, string text, int pos) {
// Открываем файл для чтения и записи
fstream file(filename, ios::in | ios::out);

if (!file) {
cerr << "Ошибка при открытии файла!" << endl;
return;
}

// Читаем содержимое файла в строку
string content((istreambuf_iterator<char>(file)), istreambuf_iterator<char>());

// Закрываем файл
file.close();

// Проверяем, если позиция находится внутри длины содержимого
if (pos < 0 || pos >= content.length()) {
cerr << "Позиция вне диапазона!" << endl;
return;
}

// Вставляем новый текст
content.replace(pos, text.length(), text);

// Открываем файл снова для записи
file.open(filename, ios::out | ios::trunc);
file << content;
file.close();
}

int main() {
// Ввод данных
string filename;
getline(cin, filename);

string text;
getline(cin, text);

int pos;
cin >> pos;

// Вызов функции замены текста
replace_text(filename, text, pos);

// Вывод обновленного файла
print_file(filename);

return 0;
}
Описание кода:
- Мы открываем файл в режиме чтения и записи (ios::in | ios::out).
- Читаем содержимое файла в строку content.
- Проверяем, находится ли заданная позиция в пределах длины контента.
- Заменяем сегмент текста в строке content на новый текст, используя метод replace.
- Открываем файл снова в режиме записи (ios::out | ios::trunc), чтобы перезаписать его содержимое.
- Записываем измененное содержимое обратно в файл.
- Наконец, в функции main мы вызываем print_file для вывода обновленного файла.
Похожие вопросы