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

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


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

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

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10889
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4331
∙ повысить рейтинг »
CradleA
Статус: Бакалавр
Рейтинг: 2517
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1756
Дата выхода:07.06.2012, 15:30
Администратор рассылки:Киселёва Алёна aka Verena (Академик)
Подписчиков / экспертов:134 / 95
Вопросов / ответов:1 / 1

Консультация # 186251: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Здравствуйте! Прошу помощи в написании кода на с++ 1) Строковый тип Строка текста содержит слова, пробелы, знаки препинания. Перенос слов со строки на строку запрещен. Текст занимает одну или несколько строк.Выделить в тексте слова, которые содержат трехбуквенный отрезок русского алфавита...


Консультация # 186251:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Здравствуйте! Прошу помощи в написании кода на с++
1) Строковый тип
Строка текста содержит слова, пробелы, знаки препинания. Перенос слов со строки на строку запрещен. Текст занимает одну или несколько строк.Выделить в тексте слова, которые содержат трехбуквенный отрезок русского алфавита(3 слога). например слова надежда.

2) Строковый тип
В каждой из некоторого количества строк указать все группы последовательных одинаковых символов (серий), а так же самую длинную серию.

Дата отправки: 30.05.2012, 14:55
Вопрос задал: Денис (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Денис!
1) Вот Вам программа, считающая 3-х слоговые слова
(что тоже самое - считающая слова с 3-мя гласными буквами!)

Код :
#include <locale>
#include <iostream>
#include <conio.h>

using namespace std;

struct w3s			//структура для хранения слов из 3 слогов
{
	char	*w;		//указатель на слово
	w3s		*next;	//указатель на следующего, у последнего = NULL
};

char	*sGlasn = "аяеэоёыиуюАЯЕЭОЁЫИУЮ";	//русские гласные буквы
w3s		*pw3s = NULL;						//указатель на первый элемент в цепочке найденных слов

bool IsRussian(char ch)						//проверка на русскую букву
{
	return (((ch >= 'А') && (ch <= 'я')) || (ch == 'ё') || (ch <= 'Ё'));
}

bool IsGlasn(char ch)						//проверка на гласную
{
	return (NULL != strchr(sGlasn, ch));	//ищем в строке символ
}

void addWord(char *w)						//сохранение слова в цепочке слов
{
	w3s	*p;									//указатель на текущее слово (в цикле)
	w3s	*last;								//указатель на последнего, 
											//  после которого вставим новое слово
	w3s	*n = new w3s;						//создаем новый элемент цепочки
	n->w = new char[strlen(w)+1];			//запрашиваем память под строку-слово
	strcpy(n->w, w);						//копируем
	n->next = NULL;							//будет последним
											//найдем, куда вставить
	for (last=NULL,p=pw3s; p; last=p,p=p->next);	//last - указатель на последний элемент
	if (last)								//что-то уже есть?
		last->next = n;						//даем ссылку на нового
	else									//еще ничего не было
		pw3s = n;							//запоминаем, как первого в цепочке
}

void printWords(void)						//вывод найденных слов
{
	w3s *p;
	if (pw3s)								//что-то нашли?
		for (p=pw3s; p; p=p->next)			//по всем элементам цепочки
			cout << p->w << endl;			//выводим слова
	else
		cout << "Слова не найдены" << endl;	//ни одного слова не нашли...
}

void freeWords(void)						//освобождение памяти цепочки слов
{
	w3s *p, *next;
	for (p=pw3s; p; p=next)
	{
		next = p->next;						//сохраним адрес следующего
		delete []p->w;						//удаляем строку текущего
		delete p;							//удаляем текущего
	}
}

void SearchWords(char *str)					//поиск слов в строке
{
	int		count;							//счетчик гласных (слогов!)
	char	*pWord;							//указатель на начало слова
	bool	fWord = false;					//=true - русская буква, =false - разделитель

	for(count=0; *str; str++)				//по всем символам строки
	{
		if (IsRussian(*str))				//русская буква?
		{
			if (!fWord)						//первая буква слова? (переход от разделителя до буквы)
			{
				fWord = true;				//имеем слово
				pWord = str;				//сохраним начало слова
			}
			count += IsGlasn(*str);			//если гласная, то добавится 1, иначе - 0 (считаем гласные)
		}
		else								//любой другой символ - разделитель
		{
			fWord = false;					//помечаем, что разделитель
			if (count == 3)					//закончилось слово с 3 гласными?
			{
				*str = 0;					//закроем нулем
				addWord(pWord);				//сохраним в цепочке слов!
			}
			count = 0;						//сбрасываем счетчик гласных букв
		}
	}
	if (count == 3)							//проверим последнее слово
		addWord(pWord);						//если 3 слога, то сохраняем
}

int main()
{
	char	str[256];

	system("chcp 1251 >> nul");		//чтобы писалось по-русски

	while (true)
	{
		cin.getline(str, 256);		//вводим строку
		if (str[0] == 0)			//ввод заканчиваем пустой строкой!
			break;					//на вывод результата
		SearchWords(str);			//поиск нужных слов в введенной строке
	}
	printWords();					//выводим слова
	freeWords();					//освобождаем память
	getch();						//ждем нажатие  на клавишу, чтобы сразу не ушло с экрана
	return (0);
}

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 05.06.2012, 02:37
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное