标签:
现实生活中是离不开 “文字” 的,多种多样的信息都是通过 "文字" 这样的形式呈现在我们面前,虽然现在声音、图片、视频越来越丰富,但是也不能掩盖 “文字” 的地位。事实上,字符串也能够玩出许多花样出来,比如ascii art, symbols等等。另外,相信作为程序员的我们一定是非常享受码代码以及写博客的过程。
从编程或者数学的角度来看,就把 “文字” 的概念抽象作为一种数据结构叫做 “字符串(String)”,它的定义如下(引自维基百科):
字符串(String),是由零个或多个字符组成的有限序列。它是编程语言中表示文本的数据类型。
通俗来说,字符串就是将有限个字符按照一定的顺序排列在一起的对象。在大部分的编程语言中都将String作为一种自带的基本类型,掌握它可以说是学习编程的基础。
这个问题要是说起来又足够写一篇满满的文章了,并且我现在对这个问题的认识只能算做一般,所以这里就很简要的介绍一下。
字符编码最根本的原因是计算机存储以及传输字符串的时候都是以“字节”的形式存在的。那么显然,存在以下的两个问题:
再加上,各个地区有各个地区的 “符号以及文字”,由此催生了一系列编解码标准,它们在设计之初只是为了本地区考虑。因此,兼容性就很差。以后很长的一段时间都是在修正这个问题,并且导致了最后UNICODE编码(国际标准)的产生。
作为程序员,按理讲是可以只把精力集中在“字符处理”这个问题上,而不用去考虑那么繁琐的编码的,但是,至少要清楚以下的两点:
以上的两个问题不糊涂的话,在编程中可以减少许多不必要的麻烦。
这里面主要涉及字符串的存储方式, 比如C语言就是通过字符数组的方式实现。字符串是否可变,如Python中字符串一旦定义是不可变的。字符串操作函数是在原来字符串基础上还是原来字符串copy的基础上,比如C++ string类就是在原来的字符串基础上进行操作的等等。不同的语言有不同的特性,在学习具体的语言的时候,最好将这些问题搞清楚,再通过之间的对比,这样学起来效率更高一些。
当然,字符串的重点还是对其的操作、处理、算法上面。下面是一些字符串最最基本的操作,不涉及任何语言特性,也只是把它们抽象出来。
基本操作 | 含义 |
---|---|
输入和输出 | 读取和显示串 |
长度 | 得到一个串中的字符数目 |
比较 | 判断两个串是否相同,还是按照字典顺序时,一个串排在另一个串的前面 |
连接 | 将两个串连接起来 |
复制 | 将一个串或者一个给定串的子串复制到另一个串 |
查找 | 在一个串种定位另一个串或者字符 |
插入 | 在一个串种插入另一个串 |
删除 | 删除一个串的一部分 |
替换 | 使用另一个串替换一个串的某个部分 |
一般的语言都会提供这些接口函数。比如,C语言的字符处理函数保存在头文件"cstring", "cstdlib", "cctype"中;C++使用string类来提供这些操作;Python中通过str类来提供一般的字符串处理函数等等。有了这些基本操作函数,就可以实现更为复杂的字符串处理,从而编写一些小程序。作为学习而言,应该尝试编写这些基本函数,有兴趣的童鞋可以试一试。我这里就来实现C++ string中的 “查找” 这个基本操作。
暴力解法:
int string :: find(const string & str)const { int i = 0, int j = 0, int index = 0; while(i < Length() && j < str.Length()) { if(mystr[i] == str[j]) { i++; j++; } else { index += 1; i = index; j = 0; } } if(j == str.Length()) return index; else return -1; }
这个板块会收集一些字符串的算法,不断的学习与更新:
这个板块会不断的收集字符串处理小程序或者叫工具,也是不断的更新中。
标签:
原文地址:http://www.cnblogs.com/Gru--/p/4325950.html