c语言 单词计数
2015-06-27 10:51
411 查看
单词计数并不是什么难的内容,如果看了k&R的《C程序设计语言》,里面就有该功能的实现,先放上源码:
原理很简单,另外值得注意的地方是存放读取字符的c,类型是int,而不是char。这是因为EOF是一个int类型的值,在VS 2013中是-1。所以我们需要c足够大,可以存放这个EOF。
#include "stdafx.h" #define IN 1 //在单词内 #define OUT 0 //不在单词内 int _tmain(int argc, _TCHAR* argv[]) { int state = OUT;//状态 int c; int count = 0;//单词数目 while ((c=getchar())!=EOF) { if (c == ' ' || c == '\n' || c == '\t') { <span style="white-space:pre"> </span>state = OUT; } else if (state == OUT) { state = IN; count++; } } printf("单词数量是%d\n", count); return 0; }这里做一下解释,首先定义了两个宏 IN和OUT,分别表示读取的一个字符是否在一个单词内。初始的状态是不在单词内,当我们读取到非空白符时,我们就认为进入了一个单词内部。这时候就计数+1。直到遇到空格、制表符和换行符,我们认为这个单词结束了,于是将状态置为OUT。
原理很简单,另外值得注意的地方是存放读取字符的c,类型是int,而不是char。这是因为EOF是一个int类型的值,在VS 2013中是-1。所以我们需要c足够大,可以存放这个EOF。
相关文章推荐
- C++ 实现MST kruskal's algorithm
- (5)风色从零单排《C++ Primer》 const,typedef,auto,decltype
- C++的RAND()函数
- C++经典面试题(三)
- C++经典面试题(二)
- C++ and The Perils of Double-Checked Locking: Part I
- 大话设计模式C++版——代理模式
- 大话设计模式C++版——代理模式
- C++构造函数详解及显式调用构造函数
- 二进制十六进制转换 (C++版)
- C++中 模板Template的使用
- Effective C++ 条款23
- 495个C语言问题读书笔记一
- C++链表
- C++对象内存分布(3) - 菱形继承(virtual)
- C++ 关于 CMFCPropertyGridCtrl 的使用方法 之二 (原创)
- C++经典面试题(一)
- c++构造函数详解
- C++ 重写重载重定义区别
- C++常见错误大全