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

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

Обсуждение

давно
Посетитель
7438
7205
04.06.2012, 23:09
общий
Можно уточнить, что понимается под "трехбуквенным отрезком русского алфавита"?
Слог из трех букв? Три слога?
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
04.06.2012, 23:24
общий
Цитата: Лысков Игорь Витальевич
понимается 3 слога конечно в скобочку указанно )
давно
Посетитель
7438
7205
05.06.2012, 02:37
общий
это ответ
Здравствуйте, Денис!
1) Вот Вам программа, считающая 3-х слоговые слова
(что тоже самое - считающая слова с 3-мя гласными буквами!)

[code h=200]#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);
}[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа