Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Хостинг Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг на Windows 2008

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

Чемпионы рейтинга экспертов в этой рассылке

Micren
Статус: Практикант
Рейтинг: 60
∙ повысить рейтинг >>
Лысков Игорь Витальевич
Статус: Профессионал
Рейтинг: 54
∙ повысить рейтинг >>
Varkon
Статус: 3-й класс
Рейтинг: 43
∙ повысить рейтинг >>

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1313
от 25.05.2009, 05:05

Администратор:Dr_Andrew
В рассылке:Подписчиков: 524, Экспертов: 40
В номере:Вопросов: 2, Ответов: 2

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>

Вопрос № 167746: Добрый день Эксперты.У меня такая проблема. Задача:Дан текст из нескольких строк.Предлагается найти в строке самое длинное слово (номер строки вводится пользователем).Найденное слово необходимо вернуть в главную функцию. Условия решения:Програм...


Вопрос № 167785: Есть задание курсового проекта... создать игру пятнашки на С++!! может у кого-нить завалялся исходный код программы желательно с подробным описанием переменых и подпрограамм!! ...

Вопрос № 167.746
Добрый день Эксперты.У меня такая проблема.
Задача:Дан текст из нескольких строк.Предлагается найти в строке самое длинное слово (номер строки вводится пользователем).Найденное слово необходимо вернуть в главную функцию.
Условия решения:Программа, созданная в ходе выполнения задания должна содержать несколько функций (как минимум три: функция, заполняющая массив, содержащий исходный текст, функция вывода исходного текста на экран, функция, выполняющая обработку массива в соответствии со своим вариантом задания).
Кроме того, нужно уделить внимание возможностям передачи данных в функции. При разработке программы не следует использовать глобальные переменные, все необходимые данные должны передаваться в функции через параметры.
2. Требования к программе
Первое окно программы содержит меню, предлагающее выбрать одно из возможных действий. Среди этих действий должны присутствовать:
∙ ввод текста,
∙ вывод текста,
∙ выход из программы,
∙ а также действ ия, определяемые вариантом.
Все функции, в том числе и работы со строками, должны быть разработаны самостоятельно (т.е. не использовать стандартных функций работы со стро-ками из библиотек языка Си). Массив, содержащий исходный текст, должен передаваться в функции через параметры.Массив должен быть создан с помощью динамического выделения памяти.
Проблема заключается в том, что я не могу сообразить, как в массиве символов, содержащий строку текста, найти максимальное слово.

Приложение:

Отправлен: 19.05.2009, 17:23
Вопрос задал: Evgenys1984 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ross
Здравствуйте, Evgenys1984!

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

Код:
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>

// Делит строку на лексемы.
// Параметры:
// s - указатель на строку
// delimiters - указатель на строку символов-разделителей
// context - указатель на контекст функции (хранит текущую позицию в строке), должен инициализироваться 0
// Возвращает:
// указатель на очередную лексему или null, если разбор строки закончен
// Заметки:
// Функция изменяет переданную ей строку.
char* _strtok(char* s, const char* delimiters, char** context)
{
unsigned char delimsmap[32];
memset(delimsmap, 0, 32);

const char* delim = delimiters;
for (; *delim; ++delim) delimsmap[*delim >> 3] |= 1 << (*delim & 0x07);

if (*context == 0) *context = s;

char* p = *context, *token = p;

for (; *p; ++p)
{
if (delimsmap[*p >> 3] & (1 << (*p & 0x07)))
{
do
{
*p++ = '


В избранное