Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.06.2022
Сообщений: 5
1

В каждой строке самое длинное слово заменить на текст "длинное слово"

16.06.2022, 12:26. Показов 191. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание:
В каждой строке самое длинное слово заменить на текст "длинное слово".
Примечания к заданию:
Составить программу, которая читает текстовый файл, выполняет над его содержимым преобразования согласно варианта задания, результат сохраняет в другой файл;
Имена обоих файлов задаются параметрами в командной строке;
Файл должен иметь не менее 10-15 строк текста;
Допускается ограничить максимальную длину строки в тексте 80 символами;
Вывести на печать исходные данные и результат.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#define _CRT_SECURE_NO_WARNINGS
 
// подключаем директивы препроцессора
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <Windows.h>
 
//объявление переменных
char filename[80];
char filename2[80];
char buf1[81], buf2[81];
 
using namespace std;
 
int main(int argc, char* argv[])
{
    system("color f0");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    FILE* inf, * outf;
    int i, j;
 
//обрабатываем возможные ошибки
if (argc<3)
  {
   printf("Не задан параметр вызова\n");
   exit(0);
  }
 
//передаем именя файлов из параметров
 strcpy(filename, argv[1]);
 strcpy(filename2, argv[2]);
 
if ((inf=fopen(filename, "r"))==NULL)
  {
   printf("Не возможно открыть файл %s\n", filename);
   exit(0);
  }
 
 if ((outf=fopen(filename2, "w"))==NULL)
  {
   printf("Не возможно открыть файл TMP\n", filename2);
   exit(0);
  }
 
 //цикл для форматирования и записи
 while (fgets(buf1, 80, inf) != NULL)
 {
     //объявление переменных
     string strk = buf1;
     int max_len = 0;
     //создаем вспомогательные переменные и в результате работы цикла находим самое длинное слово в строке
     char* pchr;
     //начинаем разделять строку на слова
     pchr = strtok(buf1, " ");
     //переменная, которая будет сомдержать длинное слово (на старте содержит первое слово строки)
     char* max_word = pchr;
 
     while (pchr)
     {
         //при нахождение более длииного слова, записываем его в max_word
         if (max_len < strlen(pchr))
         {
             max_len = strlen(pchr);
             strcpy(max_word, pchr);
         }
         //продолжаем обработку строки
         pchr = strtok(NULL, " ");
         
 
     }
 
     //заменяем самое длинное слово в строке на "длинное слово"
     string max_word_s = max_word;
     string w = "длинное слово";
     auto pos = strk.find(max_word);
     if (pos != std::string::npos)
         strk.replace(pos, max_word_s.size(), w);
     
     //запись форматированной строки во второй файл
     strcpy(buf2, strk.c_str());
 
 
     fprintf(outf, buf2);
 
 }
 //закрываем файлы
 fclose(inf);
 fclose(outf);
 
 //открываем файлы с проверкой на ошибки
 if ((inf = fopen(filename, "r")) == NULL)
 {
     printf("Не возможно открыть файл %s\n", filename);
     exit(0);
 }
 
 if ((outf = fopen(filename2, "r")) == NULL)
 {
     printf("Не возможно открыть файл TMP\n", filename2);
     exit(0);
 }
 
//новые переменные для чтения
 char f1[81], f2[81];
 
//выводим строки первого файла(до форматирвоания)
 cout << "ФАЙЛ ДО ИЗМЕНЕНИЯ: " << endl;
while (fgets(f1, 80, inf) != NULL)
{
    cout << f1;
}
 
//выводим строки второго файла(после форматирвоания)
cout << endl << endl << "ФАЙЛ ПОСЛЕ ИЗМЕНЕНИЯ: " << endl;
while (fgets(f2, 80, outf) != NULL)
{
    cout << f2;
}
 
//закрываем файлы
 fclose(inf);
 fclose(outf);
 
 return 0;
}


По итогу есть проблемы с выводом, в определенных случаях, строки сливаются в одну.
P.S результат неправильного вывода в скрине
Миниатюры
В каждой строке самое длинное слово заменить на текст "длинное слово"  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.06.2022, 12:26
Ответы с готовыми решениями:

В каждой строке найти самое длинное слово и записать результат в другой текстовый файл
В текстовом файле хранятся слова, разделенные пробелами. В каждой строке найти самое длинное слово...

Создать текстовый файл с произвольным числом строк. Заменить самое длинное слово каждой строки на ваше имя
Помогите пожалуйста, оч надо, хотябы саму замену и нахождение, оченнь надо!!!

Строки. В заданном тексте найти самое длинное слово и самое длинное предложение.
Задача: В заданном тексте найти самое длинное слово и самое длинное предложение. Помогите решить На...

Найти в тексте самое длинное слово и самое длинное предложение
вписать текст с клавиатуры и найти в этом тексте самое длинное слово и самое длинное...

Самое длинное слово в строке
Нужно ввести строку и вывести, какое слово в этой строке самое длинное. Мой код не работает,...

0
16.06.2022, 12:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2022, 12:26
Помогаю со студенческими работами здесь

Самое длинное слово в строке
Что не так? как можно решить задачу по другому? Программа должна выдавать самое длинное слово в...

Заменить самое длинное слово на самое короткое и наоборот
Необходимо заменить самое длинное слово на самое короткое и самое короткое на самое длинное. Я их...

Дан текст из нескольки строк, определить самое длинное и самое короткое слово
Вот задание: Дан текст из нескольки строк, определить самое длинное и самое короткое слово.... Я...

В заданной строке определить самое длинное и самое короткое слово
Ввести несколько строк,каждая из которых содержит некоторое количество слов.В заданной строке...

Ввести строку с клавиатуры. Найти самое длинное слово в строке и самое короткое
Ввести строку с клавиатуры. Найти самое длинное слово в строке и самое короткое. Слова...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru