Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Araell
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
#1

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

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

Нужно в считанном из файла тексте заменить все слова максимальной длины на слова минимальной длины, а результат записать в новый файл. Словом считается любая последовательность символов ненулевой длины, для которой пробел определен, как разделитель слов. Знаки препинания, стоящие в конце слов не являются их частью.
Ну мало ли, может кому-нибудь нечего делать и он поможет :3
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.12.2016, 14:13
Ответы с готовыми решениями:

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

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

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

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

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

6
JIawliet
78 / 78 / 31
Регистрация: 20.07.2016
Сообщений: 331
Завершенные тесты: 2
16.12.2016, 16:11 #2
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
Araell
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
25.12.2016, 20:18  [ТС] #3
Спасибо огромное! Не подскажете, как можно сделать так, чтобы вот это:
Artos, Portos and Nikitos.
One apple, two apple, free aple.
Он не писал в одну строку после обработки, а писал, как и прежде, в две?
0
JIawliet
78 / 78 / 31
Регистрация: 20.07.2016
Сообщений: 331
Завершенные тесты: 2
25.12.2016, 21:51 #4
69 строку поправь вот так:
C++
1
std::ostream_iterator<std::string> out(outStream, "\n");
0
Araell
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
26.12.2016, 04:24  [ТС] #5
Пыталась, но он тогда после каждого слова на новую строку открывает...
0
JIawliet
78 / 78 / 31
Регистрация: 20.07.2016
Сообщений: 331
Завершенные тесты: 2
27.12.2016, 15:41 #6
Цитата Сообщение от 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
Araell
0 / 0 / 0
Регистрация: 03.12.2016
Сообщений: 30
27.12.2016, 21:35  [ТС] #7
Огромное спасибо)
0
27.12.2016, 21:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2016, 21:35

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

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

В тексте слова заданной длины заменить указанной подстрокой, длина которой может не совпадать с длиной слова
Надо написать код для этой проги на Dev-C++ (если что версия 4.9.9.2)...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru