Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.86/29: Рейтинг темы: голосов - 29, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30

Найти все слова, начинающиеся и кончающиеся согласными буквами

02.12.2013, 15:03. Показов 6220. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дана непустая последовательность слов (не более 30), в каждом слове не более восьми строчных латинских букв. Слова разделены запятой, за последним словом точка. Найти все слова, начинающиеся и кончающиеся согласными буквами.

Очень буду благодарен за помощь в решении! Спасибо.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.12.2013, 15:03
Ответы с готовыми решениями:

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

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

Вывести слова с удвоенными согласными буквами
Задание записать в новую строку слова в которых есть удвоенные латинские буквы. Желательно с подробным объяснением происходящего.

23
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
02.12.2013, 16:35
C
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int main() {
    const char CDelim[] = " \t\n,.?!";
    const char CAlpha[] = "BCDFGHJKLMNPQRSTVWXZ";
 
    char text[128];
    char* str;
    fgets(text, sizeof(text), stdin);
 
    str = strtok(text, CDelim);
 
    while (str != NULL) {
        if (strchr(CAlpha, toupper(str[0])) &&
            strchr(CAlpha, toupper(str[strlen(str) - 1]))) {
            printf("-> %s\n", str);
        }
 
        str = strtok(NULL, CDelim);
    }
 
    return 0;
}

2
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
02.12.2013, 17:22
Эта же программа, с проверкой наоборот
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int main() {
    const char CDelim[] = " \t\n,.?!";
    const char alpha[] = "AEIOUYaeiouy";
 
    char text[128];
    char* str;
    fgets(text, sizeof(text), stdin);
 
    str = strtok(text, CDelim);
 
    while (str != NULL) {
        if (!strchr(alpha, str[0])
                && !strchr(alpha, str[strlen(str) - 1])) {
            printf("-> %s\n", str);
        }
            str = strtok(NULL, CDelim);
        }
        return 0;
    }
1
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
02.12.2013, 17:50  [ТС]
anmartex, vua72, большое спасибо!
А могли бы вы мне подробно объяснить, как работает программа?
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
02.12.2013, 19:59
fgets читает строку до 127 символов или нажатия кл. Ввод
strtok делит строку на токены (слова), разделенные символами CDelim
strchr ищет вхождение первого и последнего символов в строку СAlpha
toupper перевод символа в верхний регистр.
1
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
03.12.2013, 21:42  [ТС]
vua72, а почему именно до 127 символов?
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
03.12.2013, 22:20
1 символ на завершающий 0 остается
0
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
03.12.2013, 22:20  [ТС]
vua72, тогда почему 126?
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
03.12.2013, 23:17
до 127 символов включительно
0
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
04.12.2013, 13:21  [ТС]
vua72, не совсем понятно, что за 127 символов вообще? И почему именно 127 включительно? И еще объясните, пожалуйста, зачем мы вообще вводим здесь toupper?
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
04.12.2013, 14:19
Цитата Сообщение от JosephMorgan Посмотреть сообщение
vua72, не совсем понятно, что за 127 символов вообще?
JosephMorgan, а вы не думали для начала немного просветиться и почитать информацию по функциям?
fgets

Цитата Сообщение от JosephMorgan Посмотреть сообщение
зачем мы вообще вводим здесь toupper?
Не вводим, а используем.
toupper

В примере vua72 данная функция не используется. Используется она в моём примере, ибо я не хотел перечислять все согласные буквы в верхнем и нижнем регистрах. И поэтому я сначала перевожу символ в верхний регистр, а потом уже пытаюсь найти данный символ в заданной строке. Хочу отметить ещё то, что я не совсем согласен с вариантом vua72, т.к. в случае если в тексте будут встречаться какие-либо числа (или ещё какие-либо символы отличные от букв), то его программа будет выводить их как удовлетворяющих условию.
1
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
04.12.2013, 15:17
Цитата Сообщение от anmartex Посмотреть сообщение
В примере vua72 данная функция не используется. Используется она в моём примере, ибо я не хотел перечислять все согласные буквы в верхнем и нижнем регистрах. И поэтому я сначала перевожу символ в верхний регистр, а потом уже пытаюсь найти данный символ в заданной строке. Хочу отметить ещё то, что я не совсем согласен с вариантом vua72, т.к. в случае если в тексте будут встречаться какие-либо числа (или ещё какие-либо символы отличные от букв), то его программа будет выводить их как удовлетворяющих условию.
Можно так изменить, хотя я не уверен, что такой вариант лучше:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <string.h>
#include <ctype.h>
 
int main() {
    const char CDelim[] = " \t\n,.?!";
    //const char CAlpha[] = "BCDFGHJKLMNPQRSTVWXZ";
    const char alpha[] = "AEIOUYaeiouy";
    char text[128];
    char* str;
    fgets(text, sizeof(text), stdin);
 
    str = strtok(text, CDelim);
 
    while (str != NULL) {
        char first = str[0];
        char last = str[strlen(str) - 1];
        if (!strchr(alpha, first) && isalpha(first)
        && !strchr(alpha, last) && isalpha(last)) {
            printf("-> %s\n", str);
        }
        str = strtok(NULL, CDelim);
    }
    return 0;
}
1
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
04.12.2013, 15:33
vua72, в принципе по заданию не сказано, что встречаются какие-либо другие символы, поэтому моё замечание в данном случае подтянуто за уши. Ваш пример с точки зрения производительности более верен чем мой.
0
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
07.12.2013, 21:31  [ТС]
vua72, anmartex, но после того, как мы поставим точку, мы сможем вновь писать слова. А условие задачи предполагает, что если мы поставили точку, то это конец последовательности. То есть после точки слова уже не должны рассматриваться.
И еще вопрос: как сделать, чтобы, например, если все слова не удовлетворяют условию, то должно вывести "j=0"?
Большое спасибо.
0
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
09.12.2013, 14:40  [ТС]
anmartex, а как сделать так, чтобы после ввода точки слова уже после нее не рассматривались, т.е. точка -- это символ конца строки, подскажите, пожалуйста?
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
09.12.2013, 16:42
C
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int main() {
    const char CDelim[] = " \t\n,.?!";
    const char CAlpha[] = "BCDFGHJKLMNPQRSTVWXZ";
 
    char text[128];
    char* begin;
    char* end = text;
    fgets(text, sizeof(text), stdin);
 
    while (*end && *end != '.') {
        for (begin = end; *begin && strchr(CDelim, *begin); ++begin) { ; }
 
        for (end = begin; *end && !strchr(CDelim, *end); ++end) { ; }
 
        if ((begin < end) &&
            strchr(CAlpha, toupper(*begin)) &&
            strchr(CAlpha, toupper(*(end - 1)))) {
 
            printf("-> %.*s\n", end - begin, begin);
        }
    }
 
    return 0;
}
1
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
09.12.2013, 17:40  [ТС]
anmartex, большое спасибо. Последний вопрос: если, например, в последовательности нет слов, удовлетворяющих условию, то мы не выводим ничего. Но я вводил условие, что если слов, удовлетворяющих условию нет, то мы выводим "p=0". Но если последовательность состояла из 2 слов, то выводило "p=0, p=0". Из 3 "p=0, p=0", p=0" и так далее, в зависимости от количества введенных слов. А как сделать так, чтобы "p=0" выводилось 1 раз?
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
09.12.2013, 20:17
JosephMorgan, что-то вы с этими p совсем меня запутали. Как я понял вам нужен счётчик слов? Если да, тогда ловите:
C
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>
#include <string.h>
#include <ctype.h>
 
int main() {
    const char CDelim[] = " \t\n,.?!";
    const char CAlpha[] = "BCDFGHJKLMNPQRSTVWXZ";
 
    char text[128];
    char* begin;
    char* end = text;
    unsigned total = 0;
 
    fgets(text, sizeof(text), stdin);
 
    while (*end && *end != '.') {
        for (begin = end; *begin && strchr(CDelim, *begin); ++begin) { ; }
 
        for (end = begin; *end && !strchr(CDelim, *end); ++end) { ; }
 
        if ((begin < end) &&
            strchr(CAlpha, toupper(*begin)) &&
            strchr(CAlpha, toupper(*(end - 1)))) {
 
            total++;
            printf("-> %.*s\n", end - begin, begin);
        }
    }
 
    printf("total: %u\n", total);
 
    return 0;
}

0
0 / 0 / 0
Регистрация: 02.12.2013
Сообщений: 30
09.12.2013, 20:25  [ТС]
anmartex, не совсем. Если нет слов, удовлетворяющих условию, то должно вывести "Нет слов, удовлетворяющих данному условию". Но мне нужно, чтобы вместо записи "Нет слов, удовлетворяющих данному условию" выводило просто p=0.
0
...
 Аватар для anmartex
1910 / 1329 / 966
Регистрация: 12.02.2013
Сообщений: 2,172
10.12.2013, 03:48
C
1
2
3
4
    // line 30
    if (total == 0) {
        printf("total: %u\n", total);
    }

Не по теме:

Неужели это так трудно?

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.12.2013, 03:48
Помогаю со студенческими работами здесь

Вывести слова с удвоенными согласными буквами Java
Всем привет! Написал программу, но она не работает, уже целый день парюсь. Помогите пожалуйста разобраться в чем дело!):wall: P.S.: не...

Найти в тексте и посчитать все слова с двойными согласными
Пользователь вводит текст, необходимо посчитать количество и вывести слова с удвоенными согласными (например, аккомодация, add, читання) ...

Найти все слова в строке, начинающиеся на заданную букву и удалить из строки все слова, начинающиеся на заданную букву
2. Найти все слова в строке, начинающиеся на заданную букву и удалить из строки все слова, начинающиеся на заданную букву.

Вывести сначала все слова, начинающиеся на гласную букву, потом все слова, начинающиеся на согласную букву
Решить с использованием класса Queue. Дан текстовый файл. За один просмотр файла напечатать элементы файла в следующем порядке: сначала все...

Из заданного файла удалить все слова c двумя согласными и вывести на экран оставшиеся слова
Привет всем, в с++ не очень шарю, а до строк в изучении еще не дошел , поэтому не пойму как делать Дан текст. Словом текста считается...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru