Парсинг строки на Си
Вот что сейчас, не ужасайтесь, это моя вторая программа на С.
Код:
#include <stdio.h>
main()
{
char c;
char letters[]="БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ";
int count = 0;
scanf("%s", &c);
for(int i=0; i<=sizeof(c)/sizeof(int);i++)
{
if(isdigit(c[i])&&isdigit(c[i+2])){
i++;
count++
}
}
}
main()
{
char c;
char letters[]="БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ";
int count = 0;
scanf("%s", &c);
for(int i=0; i<=sizeof(c)/sizeof(int);i++)
{
if(isdigit(c[i])&&isdigit(c[i+2])){
i++;
count++
}
}
}
Вообще-то, вводимая строчечка должна быть массивом, или указателем(тогда нужно выделять склероз). Это только для начала...
Вот этого не понял... Например, у меня это выражение вернет 0.25 (а с учетом приведения к int - 0). Зачем это?
Цитата: mnanorn
Некроманта на костёр!
Цитата: wanja
Некроманта на костёр!
Хах. Хорошая шутка. Тут речь про Си. Си считать длину массива таким способом не умеет. :)
По теме:
Код:
#include <stdio.h> //Библиотека IO
#include <ctype.h> //Библиотека для isdigit()
int main(void)
{
char c[255]; //Введенная строка. СРАЗУ выделяем память на 255 символов
char* a; //Стрелка для пробегания letters
char letters[] = "БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ";
char* a = letters; //Стрелка для пробегания letters
int count = 0; //Инициализация счетчика
scanf("%s", c); //Ввод строки
c++; //Первый символ не может быть ОКРУЖЕН в принципе
while(c[1]) //Пока СЛЕДУЮЩИЙ символ в строке c - не 0 (т.к. последний символ тоже не может быть ОКРУЖЕН)...
{
while(a) //Пока ТЕКУЩИЙ символ в letters - не 0 (строка не закончилась)...
{
if(a == c) //Если нашли согласный...
//И этот согласный окружен цифрами
if(isdigit(*(c - 1)) && isdigit(*(c + 1)) //Бубен, зато лаконично :)
count++; //Крутим счетчик
a++; //Передвигаем стрелку дальше по letters
}
//А если согласный не нашли, передвигаемся к следующему символу с троке c
c++;
//...а стрелку ставим на начало letters
a = letters;
}
printf("COUNT = %i", count);
return 0;
}
#include <ctype.h> //Библиотека для isdigit()
int main(void)
{
char c[255]; //Введенная строка. СРАЗУ выделяем память на 255 символов
char* a; //Стрелка для пробегания letters
char letters[] = "БбВвГгДдЖжЗзКкЛлМмНнПпРрСсТтФфХхЦцЧчШшЩщ";
char* a = letters; //Стрелка для пробегания letters
int count = 0; //Инициализация счетчика
scanf("%s", c); //Ввод строки
c++; //Первый символ не может быть ОКРУЖЕН в принципе
while(c[1]) //Пока СЛЕДУЮЩИЙ символ в строке c - не 0 (т.к. последний символ тоже не может быть ОКРУЖЕН)...
{
while(a) //Пока ТЕКУЩИЙ символ в letters - не 0 (строка не закончилась)...
{
if(a == c) //Если нашли согласный...
//И этот согласный окружен цифрами
if(isdigit(*(c - 1)) && isdigit(*(c + 1)) //Бубен, зато лаконично :)
count++; //Крутим счетчик
a++; //Передвигаем стрелку дальше по letters
}
//А если согласный не нашли, передвигаемся к следующему символу с троке c
c++;
//...а стрелку ставим на начало letters
a = letters;
}
printf("COUNT = %i", count);
return 0;
}