Другие языки программирования и технологии

Бага, программа С++

Люди помогите доделать программу. Написать функцию, подсчитывающую количество слов с четным количеством согласных букв. Программа работает хорошо только при таких значениях, как ooppOO или ooppO пишит 0 int myfunction(char mass[]) { int a=0; int i; int z; int q=0; for(i=0;i<1000;i++) { if (mass=='q' || mass=='w' || mass=='r' || mass=='t' || mass=='p'|| mass=='s'|| mass=='d'|| mass=='f'|| mass=='g'|| mass=='h'|| mass=='j'|| mass=='k'|| mass=='l'|| mass=='z'|| mass=='x'|| mass=='c'|| mass=='v'|| mass=='b'|| mass=='n'|| mass=='m') { q++; printf("%d\n",q); if (mass[i+1]==' '|| mass[i+1]=='\n') { z=1; q=q%2; if (q==0) { a=a+1; q=0; } if (q!=0) q=0; } } } if (mass[i+1]=='\n' && z==1)q=q%2; } return a; } int main() { int i; char c; char mass[1000]; printf("Bbedute ctpoky\n"); for(i=0;i<1000 && (c=getchar());i++) { mass=c; if (c=='\n') { i++; mass='\n'; break; } } int wordnum; wordnum = myfunction(mass); printf("Number %d",wordnum); printf("\n"); }
так как твой код вставился здесь криво, мне было проще написать программу заново, чем восстанавливать.

решение задачи на C++:
http://pastie.org/703611

#include <stdio.h>

int num_words(char *str) {
int num = 0;
int i,j,k;
char sg[] = "qwrtpsdfghjklzxcvbnmQWRTPSDFGHJKLZXCVBNM";
k = 0;
for(i=0; ; i++) {
if(str[ i ] == ' ' || str[ i ] == '\n' || !str[ i ]) {
if(k > 0 && k % 2 == 0) num++;
if(!str[ i ]) break;
else k = 0;
} else {
for(j=0; sg[j]; j++) {
if(str[ i ] == sg[j]) {
k++;
break;
}
}
}
}
return num;
}

int main() {
char str[1000];
printf("Введите строку: ");
gets(str);
int num = num_words(str);
printf("Количество слов с чётным кол-вом гласных = %d\n",num);
return 0;
}

результат работы:

Введите строку: ooppOO ooppO one more
Количество слов с чётным кол-вом согласных = 3
Дмитрий Томашинец
Дмитрий Томашинец
756
Лучший ответ
for(bukba=0; bukba<1000; bukba++)
{
while ( (mass[bukba]>64 && mass[bukba]<91) || (mass[bukba]>96 && mass[bukba]<123) ) // Пока идут буквы, т. е. текущее одно слово. Цифры 64-91 все маленькие буквы в таблице ASCII, 96-123 все маленькие
{
bukba++; // Тут пропускаем цикл ровно на столько букв, сколько прочитаем в этом блоке while
if( mass [bukba] == 'A', || mass [bukba] =='B' || mass [bukba] == 'C' ...дальше все остальные большие согласные буквы || mass [bukba] == 'a' || mass [bukba] == 'b' || mass [bukba] == 'c' также остальные маленькие согласные)
count_sogl++; // Считаем кол-во согласных
}
count_sogl%=2 // Вычисляем остаток от деления кол-ва согласных букв в слове на 2
if (count_sogl == 0) slovo_chet_sogl++; // Если в слове четн кол-во согласных, то увеличиваем счетчик слов с четным количеством согласных

count_sogl = 0; // сбрасыаем счетчик кол-ва согл в слове
//и заново повторяется цикл, пока не закончится
}