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

Ваш аккаунт

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

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

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

Ещё раз о статических переменных

1.8K
07 мая 2008 года
igor_nf
256 / / 13.12.2006
Задача: написать функцию, которая при каждом своём вызове выделяет очередное слово из предложения и записывает его в отдельный массив(слова предложения разделены подчёркиванием).

Cи:
Код:
/*     src указывает на исходное предложение, в word пишем очередное слово. Функция возвращает логическое значение в зависимости от того, достигнут ли конец исходного предложения      */

bool get_word(const char *src, char *word) {

    static int i = 0;    
    int wi = 0;
    bool ret = FALSE;

    while(src != '_' && src != '\0')
        word[wi++] = src[i++];

    if(src != '\0') {
        ++i;
        ret = TRUE;
    }

    word[wi] = '\0';

return ret;
}

//тест
int main(int ac, char *av[]) {

    static char str[64];
    char word[32];
    bool status;

//исходное предложение
    printf("Enter str : ");
    scanf("%s", str);

    do {

        status = get_word(str, word);
        printf("Word : %s\n", word);

    }   while(status == TRUE);

return 0;
}


Можно ли решить данную задачу без статической переменной? Слышал, что использование глобальных переменных не есть good..(но сам пока с этим не сталкивался)
240
07 мая 2008 года
aks
2.5K / / 14.07.2006
В данном случае статическая переменная есть просто несколько спецефический вид глобалной. )) Так что один хрен.

По другому можно решить более продумав стуктуру данных и передовать все необходимое функции (если надо именно голый С)
9
08 мая 2008 года
Lerkin
3.0K / / 25.03.2003
Просто как вариант. Функция возвращает размер текущего слова, который можно использовать как смещение на положение следующего слова в строке.
Код:
#include <stdio.h>

int get_word( char* str, char* word )
{
    char* p = str;
    int len, pos = 0;

    while (*p)
    if ('_' == *p++)
        break;

    len = (int)(p - str);
    while (--len)
    word[pos++] = *str++;

    if ('\0' == *p)
    word[pos++] = *str++;

    word[pos++] = '\0';

    return pos;
}

int main( void )
{
    char *word, *str, *p;

    str = (char*)malloc( 1024 );
    word = (char*)malloc( 32 );

    printf( "Entry string: " );
    scanf( "%s", str );

    p = str;
    while (*p)
    {
    p += get_word( p, word );
    printf( "%s\n", word );
    }

    free( word );
    free( str );

    return 0;
}

Поправка: в конце вводимой строки надо два '\0'. А может и не надо...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог