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

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

24.04.2018, 18:12. Показов 7012. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Строка вводится с клавиатуры.
Нужно выполнить задание, не применяя функций типа strtok и прочих, которые, вроде как, облегчили бы работу со строкой, но просят без них.
Разрешили использовать только gets(), puts(). strlen() только как обозначение длины всей строки.
По возможности, комментируйте, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.04.2018, 18:12
Ответы с готовыми решениями:

Найдите самое длинное, и самое короткое слово в заданном предложении
Найдите самое длинное и самое короткое слово в заданном предложении.

В заданном предложении найти самое короткое и самое длинное слова
В заданном предложении найти самое короткое и самое длинное слова :-[

Найти самое длинное и самое короткое слово в предложении
Составить и отладить программу, которая выполняет следующие действия. В заданном тексте из...

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

6
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.04.2018, 18:30 2
Цитата Сообщение от -Jink- Посмотреть сообщение
функций типа strtok и прочих
Цитата Сообщение от -Jink- Посмотреть сообщение
использовать только gets(), puts(). strlen()
Я так понимаю, std::string и строковые буферы (stringstream) использовать тоже нельзя?
Это точно С++? Может в ветку Си перенести?
0
Заблокирован
24.04.2018, 18:30 3
Какой должен быть ответ в случае, если самых коротких или длинных строк несколько?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
24.04.2018, 18:30 4
На С++ это решается так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
 
int main()
{
    std::string line;
    std::getline(std::cin, line);
    std::istringstream ist(line);
    using input_it = std::istream_iterator<std::string>;
    const auto p = std::minmax_element(input_it(ist), input_it(), [](const auto &s1, const auto &s2) { return s1.size() < s2.size(); });
    std::cout << *p.first << " " << *p.second;
}
0
0 / 0 / 0
Регистрация: 06.03.2018
Сообщений: 3
24.04.2018, 19:09  [ТС] 5
Разрешили пользоваться только этими. То есть getline, std::string тоже отлетают. У нас упрощенное объяснение предмета и требуют такого же упрощенного ответа. На си++, но...вот как-то без всевозможных функций для строк.

Добавлено через 7 минут
Цитата Сообщение от MrGluck Посмотреть сообщение
Я так понимаю, std::string и строковые буферы (stringstream) использовать тоже нельзя?
Это точно С++? Может в ветку Си перенести?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include<stdio.h>
#include<string.h>
int main()
{
    char s[100];
    int i, j=0, k=0, max=0, min=0;
    printf("vvedi predlojenie\n");
    gets_s(s);
    //puts(s);
    for (i = 0; i < strlen(s); i++)
    {
        if (s[i] == ' ' && s[i + 1] != ' ')
        {
            j = i + 1;//начало слова
            printf("j=%d\n", j);
примерно так просят, но показывали еще с циклом while

Добавлено через 22 минуты
Цитата Сообщение от student8102 Посмотреть сообщение
Какой должен быть ответ в случае, если самых коротких или длинных строк несколько?
Очень интересный вопрос. О таком разговора не было. Наверное в задании подразумевалось, что слова не будут совпадать по длине.. Но это только мое предположение.
0
585 / 488 / 371
Регистрация: 05.11.2013
Сообщений: 1,265
Записей в блоге: 6
25.04.2018, 05:45 6
если ничего нельзя использовать, попробуй 2 ручных прохода по строке.
можно при первом проходе найти maxlen (макс.длину слова), а при втором, как только попадётся слово с длиной len=maxlen, напечатать его
если разделители только пробелы а всё остальное - это части слов, то типа

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
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
 
int main() {
 char s[100];
 printf("vvedi predlojenie\n");
 gets_s(s);
 int n = strlen(s);
 int len = 0;
 int maxlen = 0;
 int pos = 0;
 for (int i = 0; i < n; i++) {
  char c = s[i];
  if (c == ' ') { //или дописать другие разделители в условие
   if (len>maxlen) { 
    maxlen = len; pos = i; 
   }
   len = 0;
  }
  else {
   len++;
  }
 }
 if (len>maxlen) { //если последнее слово - ответ
  maxlen = len; pos = n - maxlen;
 }
 cout << "Maxlen=" << maxlen << endl;
 for (int i = 0; i < n; i++) {
  char c = s[i];
  if (c == ' ') { //или дописать другие разделители в условие
   if (len == maxlen) {
     for (int j=i-maxlen; j<i; j++) cout << s[j];
     cout << endl;
   }
   len = 0;
  }
  else {
   len++;
  }
 }
 if (len == maxlen) {
  for (int j = n - maxlen; j<n; j++) cout << s[j];
 }
 getchar();
 return 0;
}
тест

Код
vvedi predlojenie
Suka piva nada mnoga shiroka u nas doroga!
Maxlen=7
shiroka
doroga!
дли минимальной длины слова аналогично, ища минимум вместо максимума и не забывая игнорировать случай когда длина текущего слова = 0 (если идут пробелы подряд)
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
25.04.2018, 11:59 7
Цитата Сообщение от -Jink- Посмотреть сообщение
Разрешили использовать только gets()...
По возможности, комментируйте, пожалуйста.
Задумайтесь чему Вас учат: функция gets() устарела (так как небезопасна) и не применяется, gets_s() тоже не поддерживается многими компиляторами. #include<stdio.h> и #include<string.h> - это из языка С. вместо printf и scanf в С++ используются более удобные операторы вывода и ввода cout и cin ( cout <<"YES"; - выведет YES, cin>>n; - ввод значения переменной n (например 5), cout <<"n="<<n; - выведет n=5 )

Для поддержки функции strlen используйте библиотеку <cstring>

Для ввода строки можно использовать такой блок:
C++
1
2
3
char s[256];           // размер символьного массива лучше задать побольше
cout << "String:\n"; // применён \n для перевода строки, можно и так: cout << "String:"<<endl;
cin.getline(s, 256);  // используйте вместо gets_s(s);
если кроме варианта от Перс будет желание посмотреть как ещё решается Ваша задача, посмотрите ссылки из темы: Найти самое короткое и самое длинное слово в строке или используйте поиск по форуму по ключевым словам.
0
25.04.2018, 11:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.04.2018, 11:59
Помогаю со студенческими работами здесь

Поменять местами в предложении самое длинное и самое короткое слово
Сам код, но тут 12 ошибок выдает в логе: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include...

В каждом предложении требуется поменять местами самое длинное и самое короткое слово
Введите текст, заканчивающийся знаком *. Каждое предложение заканчивается точкой. В каждом...

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

Найти самое длинное и самое короткое слово в строке
Вообщем, дано задание найти самое длинное и самое короткое слово в строке. Все хорошо работает, но,...


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

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