有限状态机FSM——应用:删除代码中的注释/* */部分

该文介绍了一个使用有限状态机(FSM)实现的C语言代码,用于删除/**/风格的注释。FSM在接收到特定字符序列时切换状态,如从COPY状态到START,再到COMMENT和END状态,处理多行注释的开始、结束。在END状态下,遇到/或*会决定是返回COPY还是维持END状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有限状态机FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。

任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。

在启动一个FSM时,首先必须将FSM置于“起始状态”,然后输入一系列字符,最终,FSM会到达“结束状态”或者“消亡状态”。

应用:

删除代码中的注释/*  */部分

#include <stdio.h>

int main()
{
    enum { COPY, START, COMMENT, END };
    char c;
    int state = COPY;
    while ((c = getchar()) != EOF)
    {
        switch (state)
        {
        case COPY:
            if (c == '/')  state = START;
            else    putchar(c);
            break;
        case START:
            if (c == '*')  state = COMMENT;
            else
            {
                putchar('/');
                state = (c == '/') ? START : (putchar(c), COPY);
            }
            break;
        case COMMENT:
            if (c == '*') state = END;
            break;
        case END:
            state = (c == '/') ? COPY : ((c == '*') ? END : COMMENT);
        }
    }
    return 0;
}

此代码中,如果读入到/,先进入开始状态。若再读到*则进入注释状态,否则保持开始状态。注释状态下,当读入*就进入结束状态。在结束状态下,如果读到/表明注释结束,如果读到*仍停留在结束状态,如果读到其他的则返回注释状态。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值