August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
通常,我们按习惯格式读入整数、浮点数、单词等。但是,我们可以(有时是必须)在更低的抽象层上读入单个字符。这样做在编程上需要做更多工作,但我们能对输入有完全的控制。回顾一下表达式单词分析问题(7.8.2节),假如我们希望将1+4*x<=y/z*5分解为11个单词:
我们可以用>>读入数值,但试图以字符串类型读入标识符时,就会导致x<=y被作为一个字符串读入(因为<和=不是空白符),z*也是如此(因为*也不是一个空白符)。我们可以写出如下代码实现正确的单词分解:
函数istream::get()读入单个字符,赋予它的参数。它不跳过空白符。与>>类似,get()返回其istream对象的引用,便于我们检测其状态。
当我们采用逐个字符读取方式时,通常需要对字符进行分类:这个字符是数字吗?这个字符是大写字母吗?等等。下面是实现字符分类的标准库函数:
注意,多个字符分类可以用“或”运算符(||)进行组合。例如,isalnum(c)意味着isalpha(c)||isdigit(c),也就是说,“c是一个字母或者一个数字吗?” ...