3.3. 简单字符串处理

除了数值计算,计算机软件的第二大重要任务就是处理字符串。事实上随着现在计算机的应用越来越渗透到每一个角角落落,字符串处理的场景甚至已经超过了单纯的数值计算。

在实际应用中,字符串处理的重要程度、复杂程度和难度都一点也不亚于数值计算,比如全文检索的技术难度就非常之高,比如中文分词就是一个到目前为止都没有完全完善的复杂算法,再比如机器翻译,这是目前最为前沿和热门的研究课题。

这一部分我们先学习掌握一些最基础的简单字符串算法。要处理的字符串是ASCII字符串,即组成字符串的每一个字符都是ASCII字符。我们并不考虑中文等使用Unicode编码的字符串,事实上这也是算法竞赛的约定,所以不必担心会不会考到处理中文文本的题目。我们将要学习的内容包括:

  1. 字符串处理基础

  2. 子串搜索

  3. 回文子串相关算法

  4. 初识有限自动机:字符串转整数

在C++语言中,提供了两套字符串解决方案。一套是沿用了C语言的字符数组型字符串(C-string)解决方案,使用C语言标准库进行输入输出和处理,这主要是为了和旧时代遗留下来的C程序保持兼容。另一套是C++利用面向对象技术实现的全新的专用字符串类(C++ string)解决方案,它和C-string有一定的兼容性,比如可以用C-string进行赋值,但本质上是不同的。C++ string只能使用C++的IO流进行读写,它拥有数量众多的成员函数,处理能力非常强大。

C-string现在还有许多人喜欢用,算法竞赛的笔试部分还会有许多C-string处理的程序阅读题。这是因为C-string相比C++ string确实是有一些优势的,它的处理速度非常之快,C标准库中用于处理C-string的库函数非常简洁实用。所以在初学阶段,我们必须要了解C-string,但自己动手编程时建议使用C++ string。我们在这部分要学习的前三项内容会使用C-string编写代码,到最后一项内容“字符串转整数”时我们就将全面转为使用C++ string了。