Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
girlsbest
0 / 0 / 0
Регистрация: 27.10.2008
Сообщений: 14
#1

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

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

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

Найти 5 самых длинных слов - C++
Как найти 5 самых длинных слов? #include "stdafx.h" #include "windows.h" #include <iostream> #include <fstream> #include <math.h>...

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

Пять самых длинных слов - C++
Дана строка слов разделенных пробелами, запятыми, точками. Сформируйте новую строчку из пяти самых длинных слов. #include <iostream>...

Найти произведение самых длинных последовательностей отрицательных чисел каждой строки матрицы - C++
Всю голову сломал этой задачей:Составить программу, которая находит в каждой строке матрицы S(k,l), k≤12, l≤15, самую длинную...

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

Работа с текстом: Выделить две группы самых коротких слов - C++
Задачка Выделить две группы самых коротких слов. Вывести их на печать. Примечание: использовать cin/cout, флаги, манипуляторы....

6
CheshireCat
Эксперт С++
2896 / 1245 / 78
Регистрация: 27.05.2008
Сообщений: 3,405
08.11.2008, 12:04 #2
Что ты уже написал(а) ? Приведи код. В чем конкретно проблема, что не работает?
0
Alhimic
5 / 5 / 0
Регистрация: 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 / 0
Регистрация: 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 / 0
Регистрация: 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
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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