Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разделители 
:(
    Опции темы
baduk
Дата 14.12.2013, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.11.2013

Репутация: нет
Всего: нет



Народ помогите пожалуйсто, написал программу, которая выводит в каком слове есть гласные только 2-го рода(y,o,u), она работает, но только когда между слов 1 разделитель, а препод требует чтоб можно было сколько угодно, второй день голову ломаю, ввожу доп переменные и никак неполучается, помогите пожалуйсто.
Код

#include <stdio.h>
#include <ctype.h>
int main() {
printf("Glasnye 2-go roda:y,o,u.\n");
int b=0; /*schetchik*/
char c;
unsigned int q=0; /*mnojestvo vseh glasnyh v slove*/
unsigned int w=0; /*obedinenie glasnyh 2-go roda s glasnymi v slove*/
unsigned int glas=0; /*mnojestvo glasnyh bukv*/
glas=glas | 1<<('u'-'a') | 1<<('o'-'a') | 1<<('y'-'a') | 1<<('a'-'a') | 1<<('i'-'a') | 1<<('e'-'a');
unsigned int set_ro=0;    /*glasnye bukvy 2-go roda:y,o,u.*/
unsigned int letters_set=0; /*vvodimye bukvy*/
set_ro=set_ro | 1<<('u'-'a') | 1<<('o'-'a') | 1<<('y'-'a');
while((c=getchar()) != EOF) {
letters_set = letters_set|1<<(c-'a');
q = glas & letters_set; /*vse glasnye vvodimogo slova*/
w= q | set_ro;
switch (c)
case ',': case ' ': case '\n': case '\t':{
b++;
if (w == set_ro && q!=0){
 printf ("V slove в„–%d-vse glasnye 2-go roda\n", b); }
letters_set=0; q=0; } 
if(c=='\n'){
b=0;
printf("Vvedite sleduychee slovo\n"); }
}
}


PM MAIL   Вверх
feodorv
Дата 14.12.2013, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Интересный подход с битами)))

Цитата(baduk @  14.12.2013,  03:41 Найти цитируемый пост)
letters_set = letters_set|1<<(c-'a');

Здесь сделан несколько рискованный шаг в предположении, что значение переменной c - адекватное. А c может быть каким угодно, хоть цифрой, хоть русской буквой, хоть заглавной английской буквой, да хоть переводом строки. Вы бы проверили, что ли, что c - это английская буква...


Цитата(baduk @  14.12.2013,  03:41 Найти цитируемый пост)
w= q | set_ro;

Цитата(baduk @  14.12.2013,  03:41 Найти цитируемый пост)
w == set_ro

К чему это? А если в слове вообще гласных нету (какое-нибудь сокращение), то будет считаться, что в этом слове таки есть гласные 2-го рода?


Цитата(baduk @  14.12.2013,  03:41 Найти цитируемый пост)
switch ©
case ',': case ' ': case '\n': case '\t':{

Гм. У свитча фигурные скобки не обязательны?


Цитата(baduk @  14.12.2013,  03:41 Найти цитируемый пост)
printf ("V slove в„–%d-vse glasnye 2-go roda\n", b);

Это слабо напоминает вывод слова...


Цитата(baduk @  14.12.2013,  03:41 Найти цитируемый пост)
она работает, но только когда между слов 1 разделитель,

Если два разделителя (или более), то происходит лишнее b++, то есть номер слова становится неверным. Вы это имеете в виду?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0580 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.