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

Строки: найти первое из самых длинных и последнее из самых коротких слов и поменять их местами - C++

08.11.2008, 11:42. Просмотров 1076. Ответов 6
Метки нет (Все метки)

Помогите написать прогу)
1. Строка состоит не менее чем из двух слов. Преобразовать её по следующему правилу: найти первое из самых длинных и последнее из самых коротких слов и поменять их местами. Количество пробелов между словами должно остаться таким же, как и в исходной строке. Задачу решить без использования дополнительных строк.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2008, 11:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Строки: найти первое из самых длинных и последнее из самых коротких слов и поменять их местами (C++):

Найти 5 самых длинных слов
Как найти 5 самых длинных слов? #include "stdafx.h" #include "windows.h"...

Найти 50 самых длинных слов в файле
Здравствуйте! Буду благодарна за помощь) Нужно в большом файле с текстом...

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

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

Поиск самых длинных и комбинированных слов в файле
Здравствуйте. У меня есть такая задача: 1. Найти 2 самых длинных...

Работа с текстом: Выделить две группы самых коротких слов
Задачка Выделить две группы самых коротких слов. Вывести их на печать....

6
CheshireCat
Эксперт С++
2907 / 1256 / 114
Регистрация: 27.05.2008
Сообщений: 3,451
08.11.2008, 12:04 #2
Что ты уже написал(а) ? Приведи код. В чем конкретно проблема, что не работает?
0
Alhimic
5 / 5 / 1
Регистрация: 16.10.2008
Сообщений: 77
08.11.2008, 15:20 #3
Решай её с помощью строкового массива. Самые большие исщи в начале массива, а самые маленькие с конца
0
girlsbest
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 14
09.11.2008, 13:57  [ТС] #4
у меня не получается для начала ввести строку а потом ее вывести printfом
0
Alhimic
5 / 5 / 1
Регистрация: 16.10.2008
Сообщений: 77
09.11.2008, 20:13 #5
Чтобы ввести строку, а потом вывести используй:
C++
1
2
3
4
5
6
7
void main(void)
{
    char buffer[100];       // массив (буфер) для вводимой строки
 
    gets(buffer);            // вводим строку и нажимаем enter
    printf("%s",buffer);    // вывод введённой строки на экран
}
0
girlsbest
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 14
09.11.2008, 20:52  [ТС] #6
с этим я уже разобралась...еще бы алгоритм самой задачи сделать...)))хм...но с этим нужна помощь...
0
УЫЕУЕ
2 / 2 / 2
Регистрация: 04.11.2008
Сообщений: 37
10.11.2008, 02:39 #7
Как-то так, хоть и коряво немного получилось:

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
#include <stdio>
#include <ctype>
#include <conio>
 
void main(void)
{
    char buffer[100];       // массив (буфер) для вводимой строки
 
    gets(buffer);            // вводим строку и нажимаем enter
 
    int i(0);
    int i_min[2];          // небольшой массив, нулевой элемент которого
                           // указывает на начальный символ слова в строке buffer,
                           // а первый элемент равен количеству букв/символов в слове
 
    int i_max[2];          // аналогично как и в предыдущем
 
    int temp;              // временная переменная, просто будет держать позицию первого символа в новом слове
 
 
    while (ispunct(buffer[i]) || buffer[i] == ' ') i++;    // поиск первой буквы слова
    i_min[0] = i_max[0] = i;                               //запоминаем первую букву слова
    while (!ispunct(buffer[i]) || !buffer[i] == ' ') i++;  // поиск конца слова
    i_min[1] = i_max[1] = i;                               //запоминаем конец слова
    // весь предыдущий кусок принимает первое слово одновременно и за самое
    // маленькое и за самое большое слово.
 
 
 
    while (buffer[i]!= NULL){ //buffer[i]!=NULL  - условие того, что конец строки не достигнут
         while ((ispunct(buffer[i]) || buffer[i] == ' ') && buffer[i]!= NULL) i++;
         temp = i;
         while ((!ispunct(buffer[i]) || !buffer[i] == ' ') && buffer[i]!= NULL) i++;
 
         //если нет конца файла:
         if  (buffer[i]!= NULL){
 
             // если длина максимального слова i_max[1]-i_max[0] меньше,
             // чем длина текущего слова i - temp, то запоминаем новое слово
             if ((i_max[1] - i_max[0]) < (i - temp)){
                 i_max[0] = temp;
                 i_max[1] = i;
             }
 
             if ((i_min[1] - i_min[0]) >= (i - temp)){
                 i_min[0] = temp;
                 i_min[1] = i;
             }
          }
          // если конец файла достигнут:
          else if (!ispunct(buffer[i-1]) || !buffer[i-1] == ' '){
              if ((i_max[1] - i_max[0]) < (i - temp)){
                 i_max[0] = temp;
                 i_max[1] = i;
             }
 
             if ((i_min[1] - i_min[0]) >= (i - temp)){
                 i_min[0] = temp;
                 i_min[1] = i;
             }
          }
 
    }
    printf(" Max = ");
    //выводим максимальное слово на экран посимвольно
    for (i=i_max[0]; i<i_max[1]; i++) printf("%c", buffer[i]);
    printf("\n");
    printf(" Min = ");
    //выводим минимальное слово на экран посимвольно
    for (i=i_min[0]; i<i_min[1]; i++) printf("%c", buffer[i]);
 
    getch();
}
0
10.11.2008, 02:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2008, 02:39
Привет! Вот еще темы с решениями:

Сформируйте новую строку из пяти самых длинных слов.
Дана строка слов, разделенных пробелами, запятыми, точками. Сформируйте новую...

Удалить из файла строчки содержащие несколько самых длинных слов
Подскажите как это можно сделать.

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

Найти 3 самых больших и 3 самых маленьких числа в двумерном массиве
Дан двумерный массив размерностью m x n, нужно найти и вывести 3 самых больших...


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

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

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