博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
统计文件中单词个数
阅读量:3576 次
发布时间:2019-05-20

本文共 2643 字,大约阅读时间需要 8 分钟。

有限状态机(finite-state machine,缩写FSM),又称有限状态自动机,简称状态机,表示有限个的状态,以及在这些状态之间的动作和行为的数学模型。但我想说的是基于这种思路的组织代码的方式。这样可以让你的对象一直清楚自己的状态并且知道这个状态所能有的操作。这个东西可以用于实现游戏角色的基本逻辑(恩,百度百科)


状态机的每个状态的代码模块都是分开的,利用各自的判断条件在不同的状态之间切换,这样做一是有利于找到代码中的问题,比如走路状态除了bug就可以直接到走路的模块里去找而不用考虑其他状态,二是有利于添加新的对象状态或功能(策划:加个特殊技能吧,旋转跳跃360回旋攻击)


状态机基本适合所有的游戏项目,做做杂兵啦,做做boss啦,做做菜单啦啥的。当它有超过两个状态,就可以去考虑做个状态机了(要不还是if方便),这样在工程迭代的时候很容易加入新的更新。

#include
#include
#include
#define INIT_WORD 0 //初始化单词,预编译时被替换#define IN_WORD 1 //进入单词#define OUT_WORD 2 //退出单词#define END_WORD 3 //单词结尾,未实现#define NO_WORD 4 //未在单词中#define LINK_WORD 5 //单词中间出现-,'连接符/*enum WordState { //枚举类型(受到限制的整型),编译时被替换 INIT_WORDc =0, IN_WORDc, OUT_WORDc, END_WORDc, NO_WORDc, LINK_WORDc };*/int Count_Word_File(char *szFileName);int CountWord_Num( char *str);int main(){ char name[] = { "E:/xp/test/1.txt" }; printf("%d\n", Count_Word_File(name)); return 0;}int CountWord_Num( char *str){ int num = 0; int i = 0; int tag = INIT_WORD; if (NULL == str) { return num; } while (*str != '\0') { switch (tag) { case INIT_WORD: if (isalpha(*str)) { tag = IN_WORD; } else { tag = OUT_WORD; } break; case OUT_WORD: if (isalpha(*str)) { tag = IN_WORD; } else if (!isspace(*str) && *str != ',' &&*str != '.'&&*str != '!') { tag = NO_WORD; } break; case IN_WORD: if (isspace(*str) || *str == ',' || *str == '!' || *str == '.' || *(str + 1) == '\0') { num++; tag = OUT_WORD; } else if (isalpha(*str)) { tag = IN_WORD; } else if (*str == '-'||*str=='\'') { tag = LINK_WORD; } else { tag = NO_WORD; } break; case NO_WORD: while (1) { if (*str == ',' || *str == '.' || *str == '!' || *(str + 1) == '\0') { break; } str++; } tag = OUT_WORD; break; case END_WORD: if (tag == INIT_WORD) { num++; } break; case LINK_WORD: while (1) { if (isspace(*str) || *str == ',' || *str == '!' || *str == '.' || *(str + 1) == '\0') { break; } if (!isalpha(*str)) { tag = OUT_WORD; } str++; } if (tag == LINK_WORD) { num++; tag = OUT_WORD; } break; } str++; } return num;}int Count_Word_File(char *szFileName){ int nWords = 0;//词计数变量,初始值为0 FILE *fp; //文件指针 char carrBuffer[1024];//每行字符缓冲,每行最多1024个字符 if ((fp = fopen(szFileName, "r")) == NULL) //打开文件 { return -1; //文件打开不成功是返回-1 } while (!feof(fp))//如果没有读到文件末尾 { //从文件中读一行 if (fgets(carrBuffer, sizeof(carrBuffer), fp) != NULL) //统计每行词数 nWords += CountWord_Num(carrBuffer); } //关闭文件 fclose(fp); return nWords;}
你可能感兴趣的文章
unable to process parts as no multi-part configuration has been provided
查看>>
windows按照在idea上使用svn连接服务器遇到E120108: Unable to connect to a repository at URL
查看>>
如果不管你这么换jar包都不行,看这里No converter found for return value of type:
查看>>
unity自学笔记--光照
查看>>
java语法一些易忘知识点
查看>>
笔试DAY3
查看>>
笔试DAY4
查看>>
笔试DAY5
查看>>
笔试DAY6
查看>>
p3-Regression-Case Study
查看>>
bank笔试
查看>>
约瑟夫环问题
查看>>
笔试DAY
查看>>
浦发笔记
查看>>
Opencv高斯噪声生成与处理
查看>>
windows10环境下的Anaconda安装与OpenCV机器视觉环境搭建
查看>>
关于关闭Hyper-v 时遇到的问题及解决方案
查看>>
个人常用的IDEA 插件
查看>>
IDEA踩过的坑
查看>>
服务器安装mysql 5.7.34的历程,不是8.0.25
查看>>