С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30

В файле заменить все слова максимальной длины на слова минимальной длины

16.12.2016, 14:13. Показов 1375. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно в считанном из файла тексте заменить все слова максимальной длины на слова минимальной длины, а результат записать в новый файл. Словом считается любая последовательность символов ненулевой длины, для которой пробел определен, как разделитель слов. Знаки препинания, стоящие в конце слов не являются их частью.
Ну мало ли, может кому-нибудь нечего делать и он поможет :3
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.12.2016, 14:13
Ответы с готовыми решениями:

Строки. Поиск слова минимальной длины, вывод этой длины, номер слова и само слово
Как организовать решение такой задачи? Может как-то через создание массивов, в ячейках которых будут номера слов и числа количества букв...

Поменять местами слова максимальной и минимальной длины в строке
Задание: Дана строка. Подсчитать количество символов в каждом слове. Сформировать новую строку, в которой слова с максимальной и...

Определить в предложении слова максимальной и минимальной длины и поменять их местами. C
Доброе время суток!:) Уважаемы программисты, помогите, пожалуйста решить задачу: Дана строка предложение. Определить в предложении слова...

6
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
16.12.2016, 16:11
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
#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <string>
#include <cctype>
#include <algorithm>
 
//=============================================================================
int main()
{
  std::ifstream inStream("Test.txt");
  if (!inStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 1;
  }
 
  std::istream_iterator<std::string> in(inStream), inEnd;
  std::vector<std::string> file(in, inEnd);
  std::vector<size_t> lengths;
 
  for (size_t j = 0, sz = file.size(); j != sz; ++j)
  {
    std::string tempStr = file[j];
 
    if (std::ispunct(tempStr[tempStr.size() - 1]))
      tempStr.pop_back();
 
    lengths.push_back(tempStr.size());
  }
 
  auto itMax = std::max_element(lengths.cbegin(), lengths.cend());
  size_t max = *itMax,
         min = lengths[itMax - lengths.cbegin()],
         minIndx = 0;
 
  for (size_t j = 0, sz = lengths.size(); j != sz; ++j)
    if (min > lengths[j] &&
        lengths[j] != 0)
    {
      min = lengths[j];
      minIndx = j;
    }
 
  std::string minStr = file[minIndx];
  if (std::ispunct(minStr[minStr.size() - 1]))
    minStr.pop_back();
 
  for (size_t j = 0, sz = lengths.size(); j != sz; ++j)
  {
    if (lengths[j] == max)
    {
      if (std::ispunct(file[j][file[j].size() - 1]))
        file[j] = minStr + file[j][file[j].size() - 1];
      else
        file[j] = minStr;
    }
  }
 
  inStream.close();
  std::ofstream outStream("Test.txt");
  if (!outStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 2;
  }
 
  std::ostream_iterator<std::string> out(outStream, " ");
  for (const auto& j : file)
    *out++ = j;
 
  return 0;
}
1
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
25.12.2016, 20:18  [ТС]
Спасибо огромное! Не подскажете, как можно сделать так, чтобы вот это:
Artos, Portos and Nikitos.
One apple, two apple, free aple.
Он не писал в одну строку после обработки, а писал, как и прежде, в две?
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
25.12.2016, 21:51
69 строку поправь вот так:
C++
1
std::ostream_iterator<std::string> out(outStream, "\n");
0
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
26.12.2016, 04:24  [ТС]
Пыталась, но он тогда после каждого слова на новую строку открывает...
0
90 / 88 / 33
Регистрация: 20.07.2016
Сообщений: 403
27.12.2016, 15:41
Цитата Сообщение от Araell Посмотреть сообщение
Пыталась, но он тогда после каждого слова на новую строку открывает...
да, извините, я поторопился с ответом... вот вам рабочий вариант программы:
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
#include <iostream>
#include <fstream>
#include <sstream>
#include <iterator>
#include <vector>
#include <string>
#include <cctype>
 
//=============================================================================
int main()
{
  std::ifstream inStream("Test.txt");
  if (!inStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 1;
  }
 
  std::string temp;
  std::vector<std::string> file;
  while (getline(inStream, temp))
    file.push_back(temp);
 
  std::string minStr, maxStr;
  for (size_t j = 0, sz = file.size(); j != sz; ++j)
  {
    std::istringstream iss(file[j]);
 
    while (iss >> temp)
    {
      if (minStr.empty())
        minStr = temp;
      if (maxStr.empty())
        maxStr = temp;
 
      if (std::ispunct(temp[temp.size() - 1]))
        temp.pop_back();
 
      if (minStr.size() > temp.size())
        minStr = temp;
      if (maxStr.size() < temp.size())
        maxStr = temp;
    }
  }
 
  for (size_t j = 0, sz = file.size(); j != sz; ++j)
  {
    size_t indx = 0;
    while ((indx = file[j].find(maxStr, indx)) != std::string::npos)
    {
      file[j].replace(indx, maxStr.size(), minStr);
      indx = 0;
    }
  }
 
  inStream.close();
  std::ofstream outStream("Test.txt");
  if (!outStream)
  {
    std::cout << "Can't open file" << std::endl;
    return 2;
  }
 
  std::ostream_iterator<std::string> out(outStream, "\n");
  for (const auto& j : file)
    *out++ = j;
 
  return 0;
}
1
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
27.12.2016, 21:35  [ТС]
Огромное спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.12.2016, 21:35
Помогаю со студенческими работами здесь

Определить все слова максимальной длины в строке
Определить все слова максимальной длины в строке Начало положено,строка инициализирована int main() { setlocale(LC_ALL,...

Найти порядковый номер слова максимальной длины и позицию слова
Привет. Нужна помощь. Вот задача : Вывести на экран порядковый номер слова максимальной длины и номер позиции в строке, с которой оно...

Слово максимальной длины заменить на слово минимальной длины
Задача: Создать 2 объекта разработанного класса. Одной из компонент класса является символьная строка. В результате выполнения программы...

Функция,которая создаёт новую строку,в которой удалены все слова минимальной длины
Здравствуйте. Помогите пожалуйста. на C++ Написать функцию,которая создаёт новую строку,в которой удалены все слова минимальной длины

Нахождение слова минимальной длины
Доброе время суток Имеется такой код просто вывода текста из файла на экран(Слов в файле несколько строк.), нужно сделать так, что бы еще...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru