Задача с кодом (перестал работать) - C (СИ)
Формулировка задачи:
Написать программу, обрабатывающую введенный пользователем текст, состоящий из слов, записанных через пробелы. Длина текста не больше 255 символов. В тексте могут быть использованы любые симво-лы. Словом считать последовательность символов, не содержащую про-бел. Необходимо введенный текст вывести на экран до и после его пре-образования, выполнив все задания, указанные в индивидуальном зада-нии. Индивидуальное задание выбирается в соответствии с номером ва-рианта из нижеприведённого списка.
Само задание:25. Напечатать в алфавитном порядке все гласные буквы, которые входят в каждое нечетное слово и не входят в хотя бы одно четное сло-во. Подсчитать количество слов между первым и последним цифровым словом.
Выполнил первый пункт с гласными, всё отлично работало, написал ниже подсчет слов между цифровыми словами перестало печатать гласные. Подсчет слов работает.Есть идеи?#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int func(char mas[],char sumb) {
int n;
for (n=0; n<strlen(mas); n++) {
if (mas[n]==sumb)
return 1;
}
return 0;
}
int main(int argc, char *argv[]) {
char array[254];
char numb[]= {"1234567890"};
int j,count,n,e=0,y=0,u=0,i=0,o=0,a=0,bgn=-1,fnl=0;
int e1=0,u1=0,i1=0,o1=0,a1=0,y1=0; /*lokal const*/
count=1;
printf ("Vvedite text ne bolshe 255 simbolov\n");
gets(array);
array[strlen(array)]=' ';
for (j=0; j<strlen(array); j++) {
if(array[j]==' ') {
if (a1!=0)
a++;
else {
if (count%2==1)
a=-255;
}
if (e1!=0)
e++;
else {
if (count%2==1)
e=-255;
}
if (y1!=0)
y++;
else {
if (count%2==1)
y=-255;
}
if (u1!=0)
u++;
else {
if (count%2==1)
u=-255;
}
if (i1!=0)
i++;
else {
if (count%2==1)
i=-255;
}
if (o1!=0)
o++;
else {
if (count%2==1)
o=-255;
}
e1=0;
u1=0;
i1=0;
o1=0;
a1=0;
y1=0;
count++;
} else {
if (count%2==1) {
switch (array[j]) {
case 'a':
a1++;
break;
case 'e':
e1++;
break;
case 'y':
y1++;
break;
case 'u':
u1++;
break;
case 'i':
i1++;
break;
case 'o':
o1++;
break;
}
}
}
}
if ((a>0)&&(count/2-a>0))
printf("a");
if ((e>0)&&(count/2-e>0))
printf("e");
if ((i>0)&&(count/2-i>0))
printf("i");
if ((o>0)&&(count/2-o>0))
printf("o");
if ((u>0)&&(count/2-u>0))
printf("u");
if ((y>0)&&(count/2-y>0))
printf("y");
/* mama, eto 2 punkt pomogi*/
a=1;
count=1;
for (j=0; j<strlen(array); j++) {
if(array[j]!=' ') {
a=a*func(numb,array[j]);
} else {
if (a>0) {
if(bgn==-1) {
bgn=count;
}
fnl=count;
}
count++;
}
}
if (fnl-bgn==0)
printf ("%i",fnl-bgn);
else
printf("%i",fnl-bgn-1);
return 0;
}Решение задачи: «Задача с кодом (перестал работать)»
array[strlen(array)]=' ';
for (j=0; j<strlen(array); j++) {
Объяснение кода листинга программы
- В данном коде имеется массив (или строка) с названием
array. - В начале кода в массиве
arrayприсутствует некоторая информация. - Затем происходит проверка длины массива
arrayс помощью функцииstrlen(). - После этого, в самом массиве
arrayдобавляется символ пробела. - Далее, с помощью цикла
forпроисходит обход каждого элемента массиваarray. - Внутри цикла, для каждого элемента массива выполняется некоторое действие или операция.
- Номер элемента массива, который обрабатывается в данный момент, сохраняется в переменной
j. - Цикл продолжается до тех пор, пока не будет выполнена проверка условия
j<strlen(array), то есть пока не будут обработаны все элементы массива.