August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
当我们不能使用string(或vector),不得不使用数组存储字符时,该如何实现回文检测呢?让我们看看下面的程序:
为了测试is_palindrome(),我们首先需要将字符读入数组。为了实现这一操作,一种安全的(即没有数组溢出危险的)方法如下:
恰当地设置istream的宽度能避免下一个>>操作导致缓冲区溢出。不幸的是,这也意味着我们不知道读操作是遇见空白符结束的,还是缓冲区满结束的(因此还需要继续读入更多的字符)。另一方面,谁又能记得width()作用于输入流时的具体行为呢?标准库中string和vector更适合于作为输入缓冲区,因为它们能够根据输入的数据量动态调整大小。结尾0是必需的,因为对字符数组(C风格字符串)的大多数常用操作都假设字符串以0结束。借助read_word(),我们可以编写如下代码:
调用strlen(s)返回当调用read_word()结束之后数组中的字符数,cout<<s将输出数组中的字符,直至遇见字符0为止。
我们认为这种“数组方法”比“string方法”复杂得多,并且当我们尝试认真处理长字符串时,情况会变得更糟。参见习题10。 ...