Программа для подсчета слов в c (она должна исключать комментарии) - PullRequest
1 голос
/ 27 марта 2019

В настоящее время я получил задание сделать программу подсчета слов в c. Задача вашей программы должна считать символы, строки и слова. Строки должны учитываться, даже если они находятся внутри комментария. Комментарии должны быть представлены "" пробелом.

Я пытался использовать функцию переключения для реализации падежей внутри и снаружи слова. Но у меня проблемы с комментариями. В первом утверждении if я попытался проверить, есть ли мы в комментарии или нет, и если да, пропустите его.

#include <stdio.h>
#include <ctype.h>
#define word 1
#define nword 0

    int main(void)
    {

        int c,d,nmb = 0 , state = nword , ch = 0, ln = 0;
        while((c=getchar())!=EOF)
        {
            if( c == '/' )
            {
                 if((d=getchar())=='*')
                {       

                     int f;
                     c = getchar();
                     d = getchar();

                     while(c!='*' || d !='/')
                     {
                        c = d;
                        d = getchar();
                        if(d == '\n')
                        { ln++ ; ch++; }
                        if(d == EOF)
                        { f=1 ; break; }

                    }
                    if(f==1)
                    printf("problem in line: %d\n", ln);
                    state=word;
                    nmb++;
                }
            }
            switch(state)
            {
                case nword:

                    if(isspace(c))
                     {
                        state=word;
                        nmb++;  
                    }
                    break;
                case word:

                    if(!isspace(c))
                        state=nword;
                    break;
            } 
            if (c == '\n')
            ln++;
            ch++;
        }
        printf("words: %d\n", nmb);
        printf("chars: %d\n", ch);
        printf("lines: %d\n", ln);
        return 0;
    }

Я не могу получить правильные ответы на тестовые случаи. Я тоже не могу отладить, потому что я не вижу определенного шаблона, который можно исправить. Некоторые тестовые случаи соответствуют правильным, но другие нет. (Тестовые примеры в https://ee209 -2019-spring.github.io / assignment / wc209 / )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...