Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
pussy_destroyer
0 / 0 / 0
Регистрация: 12.05.2018
Сообщений: 1
1

Сравнение лексем

24.06.2018, 14:45. Просмотров 721. Ответов 1

Подскажите, пожалуйста, как на Си написать функцию, которая выводит сколько раз каждое слово встречалось в строке (слова-наборы символов, разделенных одним или несколькими пробелами)?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2018, 14:45
Ответы с готовыми решениями:

Порядок лексем
Привет:) Лексический транслятор работает на "тройку". Вот она: Поле Входные данные - заносим...

Выделение лексем
Приветствую всех! Помогите разобраться с выделением лексем. Необходимо выделить служебное слово...

Подсчет лексем
Добрый день! Подскажите пожалуйста, как правильно подсчитать лексемы? Задание: int n = 1;...

Таблица лексем
//--------------------------------------------------------------------------- #include <vcl.h>...

Анализатор лексем
Здравствуйте. Помогите пожалуйста, написать анализатор лексем. Я не понимаю, как он работает в...

1
Геомеханик
798 / 602 / 939
Регистрация: 26.06.2015
Сообщений: 1,409
27.06.2018, 08:30 2
Лучший ответ Сообщение было отмечено pussy_destroyer как решение

Решение

Вот по школьному
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef unsigned int uint;
 
typedef struct node {
    struct node* next;
    const char* s;
    uint n;
    uint m;
} slist;
 
int  slist_add(slist** lst, const char* s, uint n);
void slist_pop(slist** lst);
void output_rep(FILE* _out, const char* s);
 
int main(void){
    char s[] = "C++, F#, C#, C++, C++, C#, F#, Erlang, (C++), Perl...C#";
    output_rep(stdout, s);
    getchar();
    return 0;
}
 
//выводит сколько раз каждое слово встречалось в строке
void output_rep(FILE* _out, const char* s){
    uint   i;
    slist* ws = NULL;
    const char delim[] = " \t\n,.!?()[]<>{}";
 
    for(i = 0; *s; s += i){
        s += strspn(s, delim);
        i  = (uint)strcspn(s, delim);
        if(i > 0){
            if(!slist_add(&ws, s, i))
                break;
        }
    }
 
    while(ws != NULL){
        fprintf(_out, "%.*s(%u)\n", (int)ws->n, ws->s, ws->m);
        slist_pop(&ws);
    }
}
 
//добавление
int slist_add(slist** lst, const char* s, uint n){
    slist* p;
    for(p = *lst; p != NULL; p = p->next){
        if((p->n == n) && !strncmp(p->s, s, n)){
            ++p->m;
            return 1;
        }
    }
 
    if((p = (slist*)malloc(sizeof(slist))) == NULL)
        return 0;
    p->m = 1;
    p->n = n;
    p->s = s;
    p->next = *lst;
    *lst = p;
    return 1;
}
 
//удаление
void slist_pop(slist** lst){
    slist* p;
    if(*lst != NULL){
        p    = *lst;
        *lst = (*lst)->next;
        free(p);
    }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2018, 08:30

Выделение лексем
Написать программу, использующую механизм управления при помощи таблиц (управление осуществляется...

Файл лексем
В процедуре сохранения числа в файл лексем зацикливается на for i:=1 to Lenght(Str) В чём...

Подсчитать число лексем
Функция NUMTOKEN(C1,C2:string):byte - возвращает число лексем в строке С1.Строка С2 представляет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru