Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.03.2013, 19:28   #1
Rishka
 
Регистрация: 16.03.2013
Сообщений: 4
По умолчанию перевод из С++ в С

Помогите, пожалуйста перевести из С++ в С
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
typedef struct WRD {
    const char * text;
    size_t count;
} wrd_t;
 
typedef struct NODE {
    wrd_t word;
    struct NODE * next;
} node_t;
 
int push_word(node_t ** pList, const char * w) {
    if ( ! *pList ) {
        if ( ! ( *pList = malloc(sizeof(node_t)) ) )
            return -1;
        
        (*pList)->word.text = w;
        (*pList)->word.count = 1;
        (*pList)->next = NULL;
        
        return 0;
    }
    else if ( strcmp((*pList)->word.text, w) == 0 ) {
        (*pList)->word.count += 1;
        return 0;
    }
    else
        return push_word(&((*pList)->next), w);
}
 
void freelist(node_t * list) {
    while ( list ) {
        node_t * next = list->next;
        free(list);
        list = next;
    }
}
 
void swap_words(node_t * a, node_t * b) {
    wrd_t tmp = a->word;
    a->word = b->word;
    b->word = tmp;
}
 
node_t * max_count(node_t * list) {
    node_t * pMax = list;
    
    while ( list->next ) {
        list = list->next;
        if ( pMax->word.count < list->word.count )
            pMax = list;
    }
    
    return pMax;
}
 
void sort_by_count_descendant(node_t * list) {
    for ( ; list; list = list->next ) {
        node_t * m = max_count(list);
        if ( m != list )
            swap_words(list, m);
    }
}
 
#define DELIM " \t\n"
#define WORDS_TO_OUT (2)
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) {
        node_t * list = NULL, * curWordPtr = NULL;
        int curWordNumber = 0;
        char * pWord = strtok(buf, DELIM);
        
        while ( pWord ) {
            if ( push_word(&list, pWord) ) {
                fprintf(stderr, "Memory error!\n");
                exit(1);
            }
            pWord = strtok(NULL, DELIM);
        }
        
        if ( ! list ) {
            fprintf(stderr, "Empty string!\n");
            continue;
        }
        
        sort_by_count_descendant(list);
        curWordPtr = list;
        printf("%u frequently meeting words:\n", WORDS_TO_OUT);
        while ( curWordNumber < WORDS_TO_OUT ) {
            if ( curWordPtr )
                printf("%s (%u)\n", curWordPtr->word.text, curWordPtr->word.count);
            else
                break;
            ++curWordNumber;
            curWordPtr = curWordPtr->next;
        }
        
        freelist(list);
    }
    
    exit(0);
}

Последний раз редактировалось Stilet; 24.03.2013 в 22:01.
Rishka вне форума Ответить с цитированием
Старый 24.03.2013, 19:32   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Извините, но мне кажется это самый что ни на есть Си. Об этом говорит хотя бы наличие функции malloc.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 24.03.2013, 19:38   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Если только #include <stddef.h> для size_t...
Somebody вне форума Ответить с цитированием
Старый 24.03.2013, 21:50   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Еще надо слово struct перед упоминанием типов структур поставить, например
Son Of Pain вне форума Ответить с цитированием
Старый 24.03.2013, 22:32   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Еще надо слово struct перед упоминанием типов структур поставить, например
Не надо, там имена из typedef'ов используются везде. А в 12-й строке уже есть struct.
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из C++ в C# prod Помощь студентам 1 04.10.2011 17:00
Перевод с ЯД в ВМ. Abuhamed Свободное общение 16 21.06.2011 19:05
перевод з С++ на С Zewer Помощь студентам 2 13.01.2011 16:51
Перевод FVGK-2009 Visual C++ 5 26.10.2010 07:54
перевод historic Помощь студентам 0 05.10.2010 00:12