Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <stdbool.h>
- typedef struct {
- const char* text;
- unsigned text_len;
- unsigned text_pos;
- const char* token;
- unsigned token_len;
- } lexer_t;
- bool lexer_next_token(lexer_t* self)
- {
- unsigned i;
- unsigned len;
- char ch;
- for(i = self->text_pos, len = 0;
- i != self->text_len;
- i++, len++) {
- start:
- ch = self->text[i];
- if((ch < 'A' || ch > 'Z') &&
- (ch < 'a' || ch > 'z')) {
- if(len == 0) {
- if(ch != ' ') {
- self->token = &self->text[i];
- self->token_len = 1;
- self->text_pos = i + 1;
- return true;
- } else {
- len = 0;
- i++;
- goto start;
- }
- }
- self->token = &self->text[i-len];
- self->token_len = len;
- self->text_pos = i;
- return true;
- }
- }
- if(len) {
- self->token = &self->text[i-len];
- self->token_len = len;
- self->text_pos = i;
- return true;
- }
- return false;
- }
- int main(int argc, char* argv[])
- {
- FILE* file;
- size_t file_size;
- char* file_data;
- int cnt_word = 0, cnt_point = 0;
- lexer_t lexer = {0};
- file = fopen("data","r");
- fseek(file,0,SEEK_END);
- file_size = ftell(file);
- fseek(file,0,SEEK_SET);
- file_data = malloc(file_size);
- fread(file_data,file_size,1,file);
- fclose(file);
- lexer.text_pos = 0;
- lexer.text = file_data;
- lexer.text_len = file_size-1;
- while(lexer_next_token(&lexer)) {
- if(lexer.token_len == 1 && lexer.token[0] == ',')
- cnt_point++;
- else
- cnt_word++;
- }
- printf("Итого: %d слов и %d запятых\n",cnt_word,cnt_point);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement