zoukankan      html  css  js  c++  java
  • URAL 1038 Spell Checker

            这个题目可以用有限自动机的理论去做,也可以在设定好各个状态后枚举可能的情况并跳转状态,比如句子已经结束这个状态设为0,处于单词中这个状态设为1,在句子中间非单词部分时这个状态设为2,这样如果处于状态0但是遇到了小写字母就算是一个错误,处于状态1但遇到了大写字母也算是一个错误。

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    #define MAXD 100010
    int N, cnt;
    char b[MAXD];
    char isend(char ch)
    {
        return ch == '.' || ch == '?' || ch == '!';
    }
    void check(char ch, int &pat)
    {
        if(pat == 0)
        {
            if(isalpha(ch))
            {
                if(islower(ch))
                    ++ cnt;
                pat = 1;    
            }
        }
        else if(pat == 1)
        {
            if(isalpha(ch))
            {
                if(isupper(ch))
                    ++ cnt;
            }
            else
            {
                if(isend(ch))
                    pat = 0;
                else
                    pat = 2;    
            }
        }
        else
        {
            if(isend(ch))
                pat = 0;
            else if(isalpha(ch))
                pat = 1;    
        }
    }
    void solve()
    {
        int i, pat;
        cnt = 0, pat = 0;
        for(i = 0; i < N; i ++)
            check(b[i], pat);    
    }
    int main()
    {
        N = 0;
        while(scanf("%c", &b[N]) == 1)
            ++ N;
        solve();
        printf("%d\n", cnt);
        return 0;    
    }
  • 相关阅读:
    第八周上机
    第七周作业
    第七周上机练习
    第六周作业
    第六次上机
    第五次上机
    第四周作业
    第四周上机练习
    第三次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/staginner/p/2482585.html
Copyright © 2011-2022 走看看