Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782

За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов

09.11.2008, 01:32. Показов 6036. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть задача:
Строка состоит из слов. За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов, и занести их в новую строку. Слова в новой строке должны разделяться ровно одним пробелом. При написании программы использовать нуль–терминированные строки и работать только с типом char *.
Тему строк толком не объяснили.
Как проверить, что слова идут в возрастании кодов? Я прочитал в книге, что коды упорядочены только для латинских символов. Как найти самое длинное слово. Если для поиска использовать операторы while (str[i]==” “) или if (str[i]==” “), то как найти конец одного слова и как потом отделить это конкретное слово, и чтобы потом ещё можно было определить максимальное среди слов? В общем, не знаю, как лучше реализовать эту программу.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2008, 01:32
Ответы с готовыми решениями:

Найти слово, символы в котором идут в строгом порядке возрастания их кодов
Ввести n слов с консоли. Найти слово, символы в котором идут в строгом порядке возрастания их кодов. Если таких слов несколько, найти...

За один просмотр символов строки найти все самые длинные слова, состоящие только из различных букв и занести их в новую строку, разделяя пробелом
Не получается решить задачу на строки, не совсем понимаю алгоритм действий. Задание: Словом в строке считается последовательность...

Найти слово, символы в котором идут в строгом порядке возрастания их кодов
Ввести n слов с консоли. Найти слово, символы в котором идут в строгом порядке возрастания их кодов. Если таких слов несколько, найти...

10
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
09.11.2008, 13:40
Цитата Сообщение от qwert Посмотреть сообщение
Я прочитал в книге, что коды упорядочены только для латинских символов.
Что?Что за чушь.Коды упорядочены.Точка. От 0 до 255. Есть такая часть кодов,отвечающих за латинские маленькие буквы.Тут стандарт говорит,что у буквы код меньше,если она в алфавите встречается раньше. Еще он говорит,что коды соседних букв отличаются на один.

Но,вообще говоря,это тут ни при чем.Тебя не спрашивают упорядочить по алфавиту. Хотят,чтобы ты проверял упорядоченность кодов,латинские буквы тебя вообще волновать не должны.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
09.11.2008, 15:16
Code
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
#include <stdio.h>
 
using namespace std;
 
int main()
{
  char *Str = new char [1024];
  char *Res, *word, *dst, *src;
  int Max = 0;
  gets(Str);
  src = Str;
  while (*src == ' ') src++;
  Res = word = dst = src;
  do
  {
    int len; int ok; char c;
    for (len = 0, ok = 1; c = *dst++ = *src++, c && c != ' '; len++)
    {
      if (len && *(src - 2) >= *(src - 1)) ok = 0;
    }
    if (ok && len > Max)
      Max = len, Res = word;
    else if (!ok || len != Max)
      dst = word;
    while (*src == ' ') src++;
    word = dst;
  } while (*(src - 1));
  *(word - 1) = 0;
  puts(Res);
  getc(stdin);
  delete[] Str;
  return 0;
}
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
10.11.2008, 01:13  [ТС]
Большое спасибо. Я вообще то хотел только подсказку как это сделать.
Попробую по коду разобраться.

Добавлено через 33 минуты 5 секунд
Можно объяснить алгоритм, если можно, то отдельно по каждому оператору в цикле do-while. Вообще не могу разобраться. Зачем условие: c && c != ' ' в строчке for (len = 0, ok = 1; c = *dst++ = *src++, c && c != ' '; len++), если написать просто c!= ' ' , то вообще не работает…
Есть ещё один вопрос: если ни в одном из слов символы не идут по возрастанию, то компилятор выдаёт какое-нибудь слово и виснет. Как задать условие, что если ни в одном из слов символы не идут по возрастанию, то не продолжать задачу, а выдать результат, что задача не имеет решения?
0
2 / 2 / 2
Регистрация: 04.11.2008
Сообщений: 37
10.11.2008, 03:08
если ни в одном из слов символы не идут по возрастанию, то программа выдаёт последнее введённое слово или пробел, но виснуть не хочет... может я слабо стараюсь?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
10.11.2008, 22:14
Цитата Сообщение от qwert Посмотреть сообщение
Можно объяснить алгоритм, если можно, то отдельно по каждому оператору в цикле do-while
Алгоритм простой - идём и смотрим: слово подходит - оставляем, не подходит - дальше поверх него пишем. Выполняй пошагово и смотри, где что. Str - исходная строка, Res - текущий результат, src - текущая позиция в исходной строке, dst - текущая позиция, куда пишутся символы, word - начало последнего слова: если прочитанное слово не подходит, то dst возвращается к word.
Цитата Сообщение от qwert Посмотреть сообщение
Зачем условие: c && c != ' '
(с) - строка не кончилась, (c != ' ') - слово не кончилось. Если что-то кончилось, выход из цикла for.
Цитата Сообщение от qwert Посмотреть сообщение
если ни в одном из слов символы не идут по возрастанию, то компилятор выдаёт какое-нибудь слово и виснет. Как задать условие, что если ни в одном из слов символы не идут по возрастанию, то не продолжать задачу, а выдать результат, что задача не имеет решения?
(Слово выдаёт не компилятор.) Max - максимальная длина подходящего слова. Если Max останется нулём, то такого слова нет. В таком случае не надо делать *(word - 1) = 0;, так как (word - 1) будет указывать на что-то перед строкой.
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
11.11.2008, 01:28  [ТС]
Спасибо тебе огромное за помощь и объяснение! Сейчас хоть немного понял эту тему.
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
14.11.2008, 22:52  [ТС]
Есть ещё один вопрос: например, в строке в качестве разделителя идёт не пробел, а запятая, или что-нибудь другое.
Тогда понятно, что исправить строку for, например для запятой :
Code
1
for (len=0,ok=1;c=*dst++=*src++,c&&c!=',';len++)
, так работает, но в новой строке слова тоже идут через запятую. Можно ли сделать, чтобы слова в новой строке шли через пробел?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
15.11.2008, 17:40
Цитата Сообщение от qwert Посмотреть сообщение
Можно ли сделать, чтобы слова в новой строке шли через пробел?
Разобравшись в программе, можно понять, что после for'а dst указывает (куда?), соответственно, пробел надо записать по адресу (какому?).
0
146 / 146 / 32
Регистрация: 26.10.2008
Сообщений: 782
16.11.2008, 01:24  [ТС]
У меня скорее вопрос не куда ставить, а возможен ли в строках оператор «+», например:
word=word + ' ';
Пробел, думаю, нужно записать в word, ведь если все условия совпадают, то Res=word. Но так не получается.
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
18.11.2008, 13:13
Разобравшись в программе, можно понять, что после for'а dst указывает на место, куда надо писать следующее слово, соответственно, пробел надо записать по адресу (dst-1).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.11.2008, 13:13
Помогаю со студенческими работами здесь

Найти слово, символы в котором идут в строгом порядке возрастания их кодов
Ввести n слов с консоли. Найти слово, символы в котором идут в строгом порядке возрастания их кодов. Если таких слов несколько, найти...

Напечатать все самые длинные слова строки
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв, между соседними словами...

Найти все самые длинные слова в строке
Проблема со строками, ошибки кода. В чём проблема и как исправить? Подскажите, пожалуйста Задание: Словом в строке считается...

Вывести на экран все самые длинные и все самые короткие строки из текстового файла
Имеется текстовый файл. Требуется вывести на экран все самые длинные и все самые короткие строки. По возможности накидайте исходник.

В заданом тексте найти самые короткие и самые длинные слова.
В заданом тексте найти самые короткие и самые длинные слова. Если можно, то с блок-схемкой


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
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. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru