Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Парсинг строки на Си

87K
15 января 2013 года
eskelevra
1 / / 15.01.2013
Всем привет. Помогите написать программу на Си которая бы считала количество согласных в введенной строке, которые с обоих сторон окружены цифрами. Спасибо за помощь!

Вот что сейчас, не ужасайтесь, это моя вторая программа на С.

Код:
#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++
        }
    }
}
247
16 января 2013 года
wanja
1.2K / / 03.02.2003
Вообще-то, вводимая строчечка должна быть массивом, или указателем(тогда нужно выделять склероз). Это только для начала...
27K
09 декабря 2013 года
mnanorn
78 / / 01.12.2013
Цитата:

 
Код:
i<=sizeof(c)/sizeof(int);


Вот этого не понял... Например, у меня это выражение вернет 0.25 (а с учетом приведения к int - 0). Зачем это?

247
10 декабря 2013 года
wanja
1.2K / / 03.02.2003
Цитата: mnanorn
Цитата:

 
Код:
i<=sizeof(c)/sizeof(int);


Вот этого не понял... Например, у меня это выражение вернет 0.25 (а с учетом приведения к int - 0). Зачем это?


Некроманта на костёр!

27K
12 декабря 2013 года
mnanorn
78 / / 01.12.2013
Цитата: 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;
}
Кажется, как-то так. БОЛЬШИЕ БУКВЫ - это не крик, а попытка выделить ключевое слово. :)

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог