码迷,mamicode.com
首页 > 其他好文 > 详细

字符串

时间:2015-03-10 15:14:28      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

字符串的含义

现实生活中是离不开 “文字” 的,多种多样的信息都是通过 "文字" 这样的形式呈现在我们面前,虽然现在声音、图片、视频越来越丰富,但是也不能掩盖 “文字” 的地位。事实上,字符串也能够玩出许多花样出来,比如ascii art, symbols等等。另外,相信作为程序员的我们一定是非常享受码代码以及写博客的过程。

从编程或者数学的角度来看,就把 “文字” 的概念抽象作为一种数据结构叫做 “字符串(String)”,它的定义如下(引自维基百科):

字符串(String),是由零个或多个字符组成的有限序列。它是编程语言中表示文本的数据类型。

通俗来说,字符串就是将有限个字符按照一定的顺序排列在一起的对象。在大部分的编程语言中都将String作为一种自带的基本类型,掌握它可以说是学习编程的基础。

字符的编解码

这个问题要是说起来又足够写一篇满满的文章了,并且我现在对这个问题的认识只能算做一般,所以这里就很简要的介绍一下。

字符编码最根本的原因是计算机存储以及传输字符串的时候都是以“字节”的形式存在的。那么显然,存在以下的两个问题:

  1. 将字符解释(编码)成为字节的形式,不管是用哪个字节,用几个字节,都必须遵循一定的规则。
  2. 上述过程的逆过程,作为我们而言,是看不懂字节的,所以必须再按照一定的规则将字节解释(解码)成为与之对应的字符串。

再加上,各个地区有各个地区的 “符号以及文字”,由此催生了一系列编解码标准,它们在设计之初只是为了本地区考虑。因此,兼容性就很差。以后很长的一段时间都是在修正这个问题,并且导致了最后UNICODE编码(国际标准)的产生。

作为程序员,按理讲是可以只把精力集中在“字符处理”这个问题上,而不用去考虑那么繁琐的编码的,但是,至少要清楚以下的两点:

  1. 所使用语言的字符串类型的字符表示方式,存在把一个字节当作一个字符的字符串类型以及unicode字符串(真正意义上的字符串)。当然还有目前编程环境所使用的编码字符集到底是什么?
  2. 所编辑的文本文件的编码方式。

以上的两个问题不糊涂的话,在编程中可以减少许多不必要的麻烦。

字符串的实现

这里面主要涉及字符串的存储方式, 比如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;
 }
View Code

字符串算法

这个板块会收集一些字符串的算法,不断的学习与更新:

  1. 字符串查找算法
  2. 模式匹配
  3. 正则表达式

字符串小程序

这个板块会不断的收集字符串处理小程序或者叫工具,也是不断的更新中。

  1. awk(待学习)

字符串

标签:

原文地址:http://www.cnblogs.com/Gru--/p/4325950.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!