我目前有任务要在c中编写单词计数程序。任务是您的程序应计算字符,行和单词。即使在注释内,也应计算行数。注释应以“”空格字符表示。
我试图使用switch功能实现单词内外的大小写。但是我在评论时遇到麻烦。在第一个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/中的测试用例)