Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 34, средняя оценка - 4.88
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
#1

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

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

Есть задача:
Строка состоит из слов. За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов, и занести их в новую строку. Слова в новой строке должны разделяться ровно одним пробелом. При написании программы использовать нуль–терминированные строки и работать только с типом char *.
Тему строк толком не объяснили.
Как проверить, что слова идут в возрастании кодов? Я прочитал в книге, что коды упорядочены только для латинских символов. Как найти самое длинное слово. Если для поиска использовать операторы while (str[i]==” “) или if (str[i]==” “), то как найти конец одного слова и как потом отделить это конкретное слово, и чтобы потом ещё можно было определить максимальное среди слов? В общем, не знаю, как лучше реализовать эту программу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2008, 01:32     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов
Посмотрите здесь:
C++ Найти слово, символы в котором идут в строгом порядке возрастания их кодов
C++ В текстовом файле найти самые длинные и самые короткие слова и удалить их из файла.
C++ В символьной строке определить количество и вывести все самые длинные слова
C++ Строки: найти все самые короткие слова сообщения
Вывести самые длинные слова из файла C++
Удалить из строки все слова, длина которых меньше пяти символов C++
C++ Найти все слова, в которых буква ”а” встречается более чем один раз
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
XuTPbIu_MuHTAu
Эксперт С++
2224 / 739 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
09.11.2008, 13:40     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #2
Цитата Сообщение от qwert Посмотреть сообщение
Я прочитал в книге, что коды упорядочены только для латинских символов.
Что?Что за чушь.Коды упорядочены.Точка. От 0 до 255. Есть такая часть кодов,отвечающих за латинские маленькие буквы.Тут стандарт говорит,что у буквы код меньше,если она в алфавите встречается раньше. Еще он говорит,что коды соседних букв отличаются на один.

Но,вообще говоря,это тут ни при чем.Тебя не спрашивают упорядочить по алфавиту. Хотят,чтобы ты проверял упорядоченность кодов,латинские буквы тебя вообще волновать не должны.
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
09.11.2008, 15:16     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #3
Код
#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;
}
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
10.11.2008, 01:13  [ТС]     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #4
Большое спасибо. Я вообще то хотел только подсказку как это сделать.
Попробую по коду разобраться.

Добавлено через 33 минуты 5 секунд
Можно объяснить алгоритм, если можно, то отдельно по каждому оператору в цикле do-while. Вообще не могу разобраться. Зачем условие: c && c != ' ' в строчке for (len = 0, ok = 1; c = *dst++ = *src++, c && c != ' '; len++), если написать просто c!= ' ' , то вообще не работает…
Есть ещё один вопрос: если ни в одном из слов символы не идут по возрастанию, то компилятор выдаёт какое-нибудь слово и виснет. Как задать условие, что если ни в одном из слов символы не идут по возрастанию, то не продолжать задачу, а выдать результат, что задача не имеет решения?
УЫЕУЕ
2 / 2 / 0
Регистрация: 04.11.2008
Сообщений: 37
10.11.2008, 03:08     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #5
если ни в одном из слов символы не идут по возрастанию, то программа выдаёт последнее введённое слово или пробел, но виснуть не хочет... может я слабо стараюсь?
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
10.11.2008, 22:14     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #6
Цитата Сообщение от qwert Посмотреть сообщение
Можно объяснить алгоритм, если можно, то отдельно по каждому оператору в цикле do-while
Алгоритм простой - идём и смотрим: слово подходит - оставляем, не подходит - дальше поверх него пишем. Выполняй пошагово и смотри, где что. Str - исходная строка, Res - текущий результат, src - текущая позиция в исходной строке, dst - текущая позиция, куда пишутся символы, word - начало последнего слова: если прочитанное слово не подходит, то dst возвращается к word.
Цитата Сообщение от qwert Посмотреть сообщение
Зачем условие: c && c != ' '
(с) - строка не кончилась, (c != ' ') - слово не кончилось. Если что-то кончилось, выход из цикла for.
Цитата Сообщение от qwert Посмотреть сообщение
если ни в одном из слов символы не идут по возрастанию, то компилятор выдаёт какое-нибудь слово и виснет. Как задать условие, что если ни в одном из слов символы не идут по возрастанию, то не продолжать задачу, а выдать результат, что задача не имеет решения?
(Слово выдаёт не компилятор.) Max - максимальная длина подходящего слова. Если Max останется нулём, то такого слова нет. В таком случае не надо делать *(word - 1) = 0;, так как (word - 1) будет указывать на что-то перед строкой.
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
11.11.2008, 01:28  [ТС]     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #7
Спасибо тебе огромное за помощь и объяснение! Сейчас хоть немного понял эту тему.
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
14.11.2008, 22:52  [ТС]     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #8
Есть ещё один вопрос: например, в строке в качестве разделителя идёт не пробел, а запятая, или что-нибудь другое.
Тогда понятно, что исправить строку for, например для запятой :
Код
for (len=0,ok=1;c=*dst++=*src++,c&&c!=',';len++)
, так работает, но в новой строке слова тоже идут через запятую. Можно ли сделать, чтобы слова в новой строке шли через пробел?
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
15.11.2008, 17:40     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #9
Цитата Сообщение от qwert Посмотреть сообщение
Можно ли сделать, чтобы слова в новой строке шли через пробел?
Разобравшись в программе, можно понять, что после for'а dst указывает (куда?), соответственно, пробел надо записать по адресу (какому?).
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
16.11.2008, 01:24  [ТС]     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #10
У меня скорее вопрос не куда ставить, а возможен ли в строках оператор «+», например:
word=word + ' ';
Пробел, думаю, нужно записать в word, ведь если все условия совпадают, то Res=word. Но так не получается.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2008, 13:13     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов
Еще ссылки по теме:
C++ Вывести два предложения и распечатать самые длинные слова, общие для этих предложений
Создать функцию, которая на вход получает строку символов и один символ, функция печатает те слова строки, в которых встречается этот символ. C++
Найти сумму кодов всех символов заданной строки C++
C++ Найти сумму кодов всех символов заданной строки

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

Или воспользуйтесь поиском по форуму:
Somebody
2786 / 1600 / 145
Регистрация: 03.12.2007
Сообщений: 4,190
Завершенные тесты: 1
18.11.2008, 13:13     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов #11
Разобравшись в программе, можно понять, что после for'а dst указывает на место, куда надо писать следующее слово, соответственно, пробел надо записать по адресу (dst-1).
Yandex
Объявления
18.11.2008, 13:13     За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов
Ответ Создать тему
Опции темы

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