精华内容
下载资源
问答
  • 字符串是程序设计中一个重要的数据结构...在C程序中,可以用两种方法实现一个字符串的存储和运算:字符数组和字符指针。1.符串的表现形式在C程序中,可以用两种方法实现一个字符串。1.用字符数组实现。voidmain(voi...

    字符串是程序设计中一个重要的数据结构(在经典的数据结构教材中,字符串是作为一章来独立讲解的,从这里也能看出字符串是程序设计中的一个重要的数据结构),然而C语言中竟然没有专门的字符串变量。C中如何来处理这种重要的数据结构呢?

    在C程序中,可以用两种方法实现一个字符串的存储和运算:字符数组和字符指针。1.符串的表现形式

    在C程序中,可以用两种方法实现一个字符串。

    1.用字符数组实现。

    void

    main(void)

    {

    static char string

    [ ] = "I Love China!";

    printf("%s\n",string);

    }

    运行时输出:I Love

    China!

    和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址,(见图1)。string[4]代表数组中序号为4的元素(v),实际上string[4]就是*(string+4),string+4是指向字符“v”指针。

    图1

    2.用字符指针实现。

    可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。

    void

    main(void)

    {

    char *string = "I

    Love China!";

    printf("%s\n",string);

    }

    在这里没有定义字符数组,但C语言对字符串常量是按字符数组处理的,实际上在内存开辟了一个字符数组用来存放字符串数组。在程序中定义了一个字符指针变量string。并把字符串首地址(即存放字符串的字符数组的首地址)赋给它(见图2)。

    图2

    有人认为string是一个字符串变量,以为定义时把"I Love

    China!"赋给该字符串变量,这是不确切的。定义string的部分:

    char *string =

    "I Love China!";

    等价于下面两行:

    char

    *string;

    string = "I

    Love China!";

    可以看到:string被定义为一个指针变量,它指向字符型数据,请注意只能指向一个字符变量或其它字符类型数据,不能同时指向多个字符数据,更不是把"I Love

    China!"这些字符存放到string中。只是把"I Love

    China!"的首地址赋给指针变量string(不是把字符串赋给*string)。因此不要认为上述定义行等价于:

    char

    *string;

    *string = "I Love

    China!";

    在输出时,用

    printf("%s\n",string);

    %s表示输出一个字符串,给出字符指针变量名string,则系统先输出它所指向的一个字符数据,然后自动使string加1,使之指向下一个字符,然后再输出一个字符,……,如此直到遇到字符串结束标志‘\0’为止(‘\0’的ASCII码为0,ASCII码为0的字符是“空操作字符”,即它不引起任何控制操作,也不是一个可显示的字符)。注意,在内存中,字符串的最后被自动加了一个‘\0’(如图8.18所示),因此在输出时能确定字符串的终止位置。

    通过字符数组名或字符指针变量可以输出一个字符串。而对一个数值型数组,是不能企图用数组名输出它的全部元素的。如:

    int

    i[10];

    printf("%d\n",i);

    是不行的,只能逐个元素输出。显然,可以把字符串看作为一个整体来处理,可以对一个字符串进行整体的输入输出。

    2.字符串指针作函数参数

    将一个字符串从一个函数传递到另一个函数,可以用地址传递的办法,即用字符数组名作参数或用指向字符串的指针作参数。在被调用的函数中可以改变字符串的内容,在主调函数中可以得到改变了的字符串。

    3.字符指针变量与字符数组

    虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈,主要有以下几点:

    (1)字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串的首地址),决不是将字符串放到字符指针变量中。

    (2)赋初值的方式。对数组赋初值要用static存储类别,如

    static str[ ]={

    "I love China! ");

    而对字符指针变量不必加static存储类型,如

    char *a = "I

    love China! ";

    这是因为并没有对数组初始化,只是对指针变量初始化。

    (3)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。

    char

    str[14];

    str = "I love

    China! ";//错误

    而对字符指针变量,可以采用下面方法赋值:

    char

    *a;

    a = "I love

    China! ";

    但注意赋给a的不是字符,而是字符串的首地址。

    展开全文
  • 这篇文章主要介绍了数据结构中的字符串以及有关字符串的很重要的算法——模式匹配算法,重点介绍了KMP算法的实现原理。

    前言

    计算机中的非数值处理的对象基本上是字符串数据,随着语言加工程序的发展,字符串作为一种变量类型出现在越来越多的程序设计语言中,同时也产生了一系列的字符串操作。在日常的程序设计中,如名称、地点等信息都是以字符串形式表示的,又如文本框、输入框等都是以字符串数据作为处理对象。

    什么是字符串

    字符串(string),或者直接叫作串,是由零个或多个字符组成的有限序列

    串中字符的个数称为串的长度,当字符个数为0时,此时串被称为空串

    由一个或多个空格组成的串称为空格串,需要注意的是空串不等于空格串,虽然它们看起来都没有内容。

    String str1 = "Jack";
    String str2 = "123@qq.com";
    String str3 = "";		// 空串
    String str4 = " ";		// 空格串(一个空格)
    

    串中任意个(包含0个)连续的字符组成的子序列称为该串的子串,包含子串的串称为主串,子串第一个字符在主串中的位置表示该子串在主串中的位置。

    String str1 = "helloworld!";
    String str2 = "ll";		//	str2 是 str1 的子串,它在 str1 中的位置为 2
    

    当两个串的值相等时,称两个字符串相等

    String str1 = "WuHan";
    String str2 = "WuHan";	// str1 与 str2 相等
    

    字符串的表示和实现

    字符串有时不仅仅是一个表示特定信息的常量,它有时候也以变量的形式出现。字符串通常有三种机内表示方法。

    定长顺序存储表示

    类似于线性表的顺序存储结构,用一组地址连续的存储单元存储串值额字符序列。

    堆分配存储表示

    以一组地址连续的存储单元存放串值字符序列,但存储空间是在程序执行过程中动态分配的。

    块链存储表示

    和线性表的链式存储结构相类似,采用链表方式存储串值。

    串的模式匹配

    模式匹配是数据结构中字符串的一种基本运算,是各种串处理系统中的最重要的操作之一。

    设 S 是给定的主串,T 是给定的子串,在主串 S 中查找等于子串 T 的串的过程就是模式匹配的过程,T 称为模式串。如果在 S 中找到 T 子串,则称匹配成功,函数返回 T 在 S 中首次出现的存储位置,否则匹配失败,返回-1。

    字符串匹配算法有很多,这里只介绍两种最常见的算法。

    BF(Brute-Force)算法

    原理

    最朴素的想法就是枚举主串的每一个字符,以每一个字符为起始点,与模式串的第一个字符开始尝试匹配,如果相同继续匹配主串和模式串的下一个字符,如果不同,从主串下一个字符再次开始匹配。

    如果在一次匹配过程中匹配到模式串的最后一个字符,则匹配成功,否则失败。

    代码实现
    public int myBFIndexOf(String S, String T) {
        int n = S.length(), m = T.length();
        // pos 为本轮匹配主串的起始字符位置,不能大于主串长度减模式串长度的差
        // 因为当 pos > n - m 时,一定会匹配失败
        for(int pos = 0; pos <= n - m; pos++) {
            int j = 0;
            for(; j < m; j++) {
                if(S.charAt(pos + j) != T.charAt(j)) break;
            }
            // 匹配到模式串最后一个字符意味着匹配成功
            if(j == m) return pos;
        }
        return -1;
    }
    
    动图展示

    在这里插入图片描述

    复杂度分析
    • 时间复杂度: O ( ( n − m ) ∗ m ) O((n - m)*m) O((nm)m) ,其中枚举主串的起始字符时间复杂度为 O ( n − m ) O(n - m) O(nm) ,匹配模式串的时间复杂度为 O ( m ) O(m) O(m)

    • 空间复杂度: O ( 1 ) O(1) O(1) ,仅使用常数空间保存一些变量。

    KMP(Knuth-Morris-Pratt) 算法

    原理
    暴力解法的问题

    在暴力求解时,每当一轮匹配过程出现字符不等时,都会以主串的下一个字符为起始字符开启新的一轮匹配。考虑一个极端的情况,主串为 aaaaaaaaaaaaaaab ,模式串为 aaaaab ,每一轮匹配都会比较到模式串的最后一个字符 b ,然后发现不相等,继续下一轮匹配。

    不难发现,这里存在明显的问题,那应该如何改进呢?

    优化的地方

    我们先来看看匹配的具体过程,下面是第一轮匹配失配时的状态:

    在这里插入图片描述

    按照暴力匹配的方式,会从主串的第二个字符重新开始匹配:

    在这里插入图片描述

    事实上,我们很轻易地就会观察到(其实是 D.E.Knuth,J.H.Morris 和 V.R.Pratt 三位天才观察到的),已经匹配过的主串中的字符和模式串中的字符是有重叠的,没有必要再次匹配:

    在这里插入图片描述

    因此指向主串的指针不用回溯,指向模式串的指针不必从头开始,这样就大大提高了效率。

    在这里插入图片描述

    前缀表和前缀函数

    现在我们知道了 BF 算法可以优化的地方,就是找到每次失配时已经匹配过的主串中的字符和模式串中的字符中重叠的部分,这部分不需要再次比较。

    这里所说的重叠部分就是字符串的公共前缀和后缀,模式串的每一个子串(从下标0开始)的最长公共前后缀的长度用一个一维数组表示就构成了模式串的前缀表,或者编程时习惯性命名为 next 数组

    在上面的例子中,第一次失配时,字符串匹配到了模式串的 b 字符,此时已经匹配过的字符串为 aaaaa ,它的最长公共前后缀为 aaaa

    在这里插入图片描述

    看了上面的动图应该能明白为什么说公共前后缀部分为什么不需要再次比较,但是我们还不清楚怎么求公共前后缀,下面我们看看一个更常规的例子,模式串 abaabcac 的前缀表是怎么得来的的。

    在这里插入图片描述

    上面得到前缀表的方式是肉眼观察的,原理也很简单,就是从字符串两边开始分别向另一边逐个比较,相等就继续,否则就停止,这样就可以得到每一个子串的最长公共前后缀的长度,不过这个时间复杂度很高,有没有可能简化这个过程呢?

    答案是,当然有。D.E.Knuth,J.H.Morris 和 V.R.Pratt 三位天才给出了线性时间复杂度下求解 next 数组的方法,它是 KMP 算法的核心,称为前缀函数

    下面我们看看,线性时间复杂度下 next 数组的求解过程。

    在这里插入图片描述

    起始 next[0] = 0,指针 j 指向位置0,指针 i 指向位置1;

    如果 T[j] == T[i],指针 i、j 均向后移动,重复该过程,直到 T[j] != T[i] 或者 i 指向模式串末尾;

    如果 T[j] != T[i],指针 j 指向上一位置的 next 数组对应的值,即 j = next[j - 1],重复该过程,直到 T[j] == T[i] 或者 j == 0;

    如果 j == 0,此时 T[j] != T[i] ,指针 j 不动,指针 i 继续向后移动。

    代码实现
    public int myKMPIndexOf(String S, String T) {
        int n = S.length(), m = T.length();
        if (m == 0) return 0;
        // 求 next 数组
        int[] next = new int[m];
        for (int i = 1, j = 0; i < m; i++) {
            while (j > 0 && T.charAt(i) != T.charAt(j)) {
                j = next[j - 1];
            }
            if (T.charAt(i) == T.charAt(j)) {
                j++;
            }
            // 前 i + 1 个字符组成的字符串,最长公共前后缀长度为 j
            next[i] = j;
        }
        // 匹配过程
        // 指向主串的指针 i 一直向后,不回溯
        for (int i = 0, j = 0; i < n; i++) {
            // 如果失配,根据 next 数组更新模式串指针 j
            while (j > 0 && S.charAt(i) != T.charAt(j)) {
                j = next[j - 1];
            }
            // 如果匹配,模式串指针 j 后移
            if (S.charAt(i) == T.charAt(j)) {
                j++;
            }
            // 匹配到模式串最后一个字符意味着匹配成功
            if (j == m) return i - m + 1;
        }
        return -1;
    }
    
    动图展示

    在这里插入图片描述

    复杂度分析
    • 时间复杂度: O ( m + n ) O(m + n) O(m+n) ,其中 n 为主串的长度,m 为模式串的长度。

    • 空间复杂度: O ( m ) O(m) O(m) ,使用一维数组存储模式串的前缀表。


    >下一篇:

    展开全文
  • 字符串是一特殊的线性表,其数据元素限定为字符集。它由零个或多个字符组成,表达式形如 String s=“123”; 其中 s是字符串的名字 双引号括起来的字符序列是字符拆的值,引号本身不属于字符串 双引号之内的可以...

    学习时间

    2021-01-18

    学习内容

    字符串的基本概念

    字符串是一种特殊的线性表,其数据元素限定为字符集。它由零个或多个字符组成,表达式形如 String s=“123”;
    其中

    1. s是字符串的名字
    2. 双引号括起来的字符序列是字符拆的值,引号本身不属于字符串
    3. 双引号之内的可以是数字、字母、字符等
    4. 双引号里字符的个数就是字符串的长度

    常用术语:

    1. 空串:长度为0.不包含任何字符
    2. 空格串:仅有一个或者多个空格组成,长度大于等于一
    3. 字串:任意个连续字符组成的子序列就是一个串的子串
    4. 主串:包含子串的串就是主串
    5. 前缀子串:比如"123"是"12345"的前缀子串
    6. 后缀子串:比如"345"是"12345"的后缀子串
    7. 串相等:当且仅当两个串完全相同时,说明两个串相等
    8. 模式匹配:子串在主串中出现的第一个位置的运算就是串的模式匹配。这时,主串也叫目标串,子串也叫模式串。
      且从上面的叙述可以看出,空串是任意串的子串,任意串也是自身的子串

    字符串的运算

    详见
    StringBuffer类
    String类
    在这两篇博客中,本人有关于在Java中字符串运算的详细演示。

    字符串的存储结构及实现

    定长顺序串
    串的定长顺序存储结构是用一组地址连续的存储单元存储串的字符序列,也称为“静态存储分配的顺序串”。
    定长顺序存储直接使用定长的字符数组定义,为每个定义的串变量分配一个固定长度的存储区,存储分配在编译时完成。

    在对定长顺序串进行操作时,可能出现“串截断”现象。为了避免这种现象,我们可以不限定串的最大长度,即动态分配串值的存储空间。

    堆串
    串的堆存储结构也是用地址连续的存储单元存储串的字符序列,不同的是,堆串的存储空间时在程序执行过程中动态分配的。在整个系统中存在一个称为“”的自由存储区。在每当建立一个新串时都可以通过动态分配函数从这个空间中分配一块实际所需的存储空间,用来存储新的串。所以只要存储空间分配成功,在操作的过程中就不会发生“截断”。

    块链串
    因为串是一种特殊的线性表,所以我们可以用链式存储结构存储串。这时,链表的每一个结点既可以存储一个字符,也可以存储多个字符。每一个结点称为,整个链表称为块链结构

    存储密度
    存储密度=(串值所占的存储位)/(实际分配的存储位)

    串的模式匹配

    我们用BF算法和KMP算法演示

    BF算法
    算法思想:
    BF算法也叫“蛮力算法”。比如在主串的第n个位置上第一次处出现了模式串的第一个字符。那么就从这个位置开始,一个一个的跟后面字符比较,以此类推,直到后面的都相同,说明匹配成功。否则,哪怕只有一个不相等也不成功。

    算法分析:
    BF算法思想十分简单,但在最坏的情况下,算法的时间复杂度为O(m*n),其中n和m分别是主串和模式串的长度。

    KMP算法
    算法思想:我们可以在匹配的第一个字符的时候,采取将模式串的几个字符同时和主串的字符进行比较,这样就可以减少比较的次数,从而降低时间复杂度。

    算法分析:
    KMP算法的时间复杂度为O(m+n)

    两个算法的对比
    虽然BF算法的时间复杂度为O(m*n),但是在实际执行的过程中,m往往是远远小于n的,所以其时间复杂度近似等于O(m+n),至今仍被采用。所以说KMP算法在模式串和主串之间存在很多“部分匹配成功”的时候,才显得比BF算法优越。KMP算法最大的特点是主串指针不需要回溯,整个过程中,主串只需要从头到尾扫描一次,对于处理从外设输入的庞大文件很有效。

    总结

    1. 字符串是一种特殊的线性表,其特殊性在于组成线性表,其特殊性在于组成线性表的数据元素仅是一个单字符
    2. 字符串常用的存储方式有定长顺序串、堆串、块链串三种
    3. 顺序串是以一维数组作为存储结构,其运算实现方法类似于线性表的顺序存储结构
    4. 堆串是以动态一维数组作为存储结构,其运算实现方法和顺序串在存储管理上有所不同
    5. 块链串是以链表作为存储结构,其运算实现方法类似于链表
    6. 串的模式匹配算法:BF模式匹配算法处理思路简单,但由于需要进行失配后主串回溯处理,所以时间复杂度较高;KMP模式匹配算法消除了失配之后的回溯,所以匹配速度较快。
    展开全文
  • 1.String存储结构; 2.String str="abc";和String str=new String("abc");创建字符串对象的区别; 3.字符串加法运算坑;

    一、知识前提

    • 1、String是类,创建的是对象,对象存放位置是堆。
    • 2、字符串是常量,字符串常量存放在“字符串常量池”中。
    • 3、字符串常量池在jdk版本更新后的位置变化:
      • jdk6以及6之前常量池是放在方法区(永久代);
      • jdk7,常量池放在堆中;
      • jdk之后,元空间取代了永久代区域。运行时常量池和静态常量池放在元空间中,而字符串常量池依然放在堆中

    二、String两种创建赋值区别

    String str = new String(“hello”)创建了1个或2个对象,String str = "hello"创建了一个或0个对象

    (个人理解,这里说的对象就代表的是地址)

    参考博客:String s = new String(“abc”) 和String s = "abc"的区别 - 简书 (jianshu.com)

    1.String str = new String(“hello”)的创建过程

    • 系统先在字符串常量池里面寻找是否有一个"hello"的字符串;

    • 如果有的话,则在堆中复制一个该字符串,并且将堆中的引用指向str,这个时候系统只创建了一个对象,即堆中的对象;

    • 如果没有的话,则会先在字符串常量池中先创建一个字符串为"hello"的常量,然后再复制到堆里面,最后将堆所在的地址指向str,这个时候创建了两个对象;

    2.String str = "hello"的创建过程

    • 系统先在字符串中寻找是否存在"hello"的常量
    • 如果存在,则直接将该"hello"在常量池中的地址指向str,这个时候,系统没有创建新对象。
    • 如果不存在,则在常量池中新建一个"hello"并放入常量池里面,然后再返回该地址,这个时候,系统创建了一个对象。

    三、String两种创建的对象以及赋值的字符串常量存放位置

    1. String str = new String(“Hello”);形式创建字符串对象的内存结构

    2. String str =“Hello”;形式创建字符串对象的内存结构

    在这里插入图片描述

    四、实际验证

    • 测试类代码
    public class Test {
    	public static void main(String[] args) {
    		
    		String str1 = "hello";
    		String str2 = "hello";
    		
    		String str3 = new String("hello"); 
    		String str4 = new String("hello"); 
    		
    		System.out.println(str1 == str2);//true
    		System.out.println(str3 == str4);//false
            
    		System.out.println(str1 == str3);//false
            
    		System.out.println(str1.equals(str3));//true
    		System.out.println(str4.equals(str3));//true
    	}
    }
    
    • 结果分析
    System.out.println(str1 == str2);//true
    System.out.println(str3 == str4);//false
    

    ​ 0. ==对于引用数据类型,先比较值是否相等,值相等后再比较变量存储地址值是否相等,相等才返回true。

    ​ 1. 使用String str = “hello”; 方式创建字符串对象,变量str存放的地址值应该时“hello”在常量池中的地址值,所以,str1==str2为true。

    ​ 2. 使用String str = new String(“hello”); 方式创建字符串对象,变量str存放的对象在堆中信息存储区域的地址,而堆中存放对象信息存储区里存放的才是“hello”在常量池中的地址。而没次new创建对象都会在队中开辟新的对象信息存储区空间,所以,str3 == str4 为false。

    System.out.println(str1 == str3);//false
    

    ​ 1.很显然,str1变量存放的是“hello”在常量池中地址值,而str3变量存放的是堆中对象信息存储区空间地址,自然不相等。

    System.out.println(str1.equals(str3));//true
    System.out.println(str4.equals(str3));//true
    

    ​ 1.equals方法是String重写的父类Object的方法,String重写后比较的只是值。四个对象的值都是“hello”,自然都为true。

    五、String加法运算原理

    两个或者两个以上的字符串常量直接相加,在预编译的时候“+”会被优化,相当于把两个或者两个以上字符串常量自动合成一个字符串常量。编译期就会优化, 编译的字节码直接就把加号去掉了, 直接定义一个常量:

    如:

    String s1 = "ab";
    String s2 = "a"+"b";
    System.out.println(s1==s2);//为true
    

    其他方式的字符串相加都会使用到 StringBuilder,会创建新对象:

    如:

    String s1="a";
    String s2="b";
    
    //2.其他方式字符串相加
    String s3=s1+s2;
    String s5 = s1+"b";
    String s4 = "a"+s2;
    
    //1.纯字符串常量相加
    String s6 = "a"+"b";
    
    String s7 = "ab";
    
    System.out.println(s7==s3);//false
    System.out.println(s7==s4);//false
    System.out.println(s7==s5);//false
    
    System.out.println(s7==s6);//true
    
    展开全文
  • 第四章 字符串、数组和...字符串是一种特殊的线性表,由于线性表有顺序存储和链式存储两种基本的存储结构,因此字符串也有两种基本的存储结构:顺序串和链式串 4.2字符串的模式匹配 寻找字符串p在字符串t中首次出现的位
  • 一个字符串是一个不可改变的字节序列,字符串通常是用来包含人类可读的文本数据。和数组不同的是,字符串的元素不可修改,是一个只读的字节数组。每个字符串的长度虽然也是固定的,但是字符串的长度并不是字符串类型...
  • 一、字符串的创建和赋值 字符串或串(String)是由数字、...二、字符串基本特性 1.连接操作符与重复操作符 ## 1.连接操作符和重复操作符 name = "world" print ('hello ' + name) print ("*"*30 + '学生管理系统' +
  • 的定义,结构,操作。
  • 字符串1.1 创建和赋值1.2 字符串基本特性1.2.1 连接操作符和重复操作符1.2.2 成员操作符1.2.3 正向索引和反向索引1.2.4 切片1.2.5 可迭代对象/for循环1.2.6 练习- - -回文字符串1.3 字符串的内建方法1.3.1 字符串...
  • 数据结构——

    2021-10-29 11:48:49
    一个检索关键字就是一个字符串,如“计算机”、“数据结构”等。按关键字进行检索实际就是对字符串进行查找与匹配。 提示:以下是本篇文章正文内容,下面案例可供参考 一、串的概念 串(String)是零个或多个字符...
  • 及其运算入门

    2021-05-16 15:15:04
    计算机上的非数值处理的对象基本上是字符串数据。 在较早的程序设计中,字符串是作为输入和输出的常量出现的。 随着语言加工程序的发展,产生了字符串处理,这样,字符串也就作为一变量类型出现在越来越多的程序...
  • 内置数据结构字符串 首先学习:字符串的创建,赋值 字符串或串(String)是通过数字、字母、下划线组成的一串字符。Python 里面最常见的类型。 可以简单地通过在引号间(单引号,双引号和三引号)包含字符的方式创建它。 ...
  • MATLAB字符和字符串

    千次阅读 2021-04-18 05:49:35
    3.字符和字符串在MATLAB中,几个字符(Character)可以构一个字符串(String)。一个字符串被视为一个行向量,而字符串中的每一个字符(含空格符),则是...一般字符串的创建在MATLAB中,所有的字符串都用个单引号括起来...
  • Java基本程序设计结构数据类型整型浮点类型char类型boolean类型运算符数值类型之间的转换强制类型转换字符串拼接String APIString常用的方法空串与Null串字符串构建线程安全与线程不安全数据类型Java中一共有8种基本...
  • Python字符串使用详解

    千次阅读 多人点赞 2021-12-13 14:10:29
    字符串是一种数据结构,这让我们有机会学习索引和切片——用于从字符串中提取子串的方法。 1 字符串索引 在Python语法支持中,我们简单的阐述过字符串的使用,现在我们看看python程序在处理字符串时,如何对其...
  • 《Python Cookbook(第2版)中文版》——1.5 去除字符串两端的空格本节书摘来自异步社区《Python Cookbook(第2版)中文版》一书中的第1章,第1.5节,作者[美]Alex Martelli , Anna Martelli Ravenscrof , David Ascher ...
  • 2、布尔类型(Boolean)在Python中,None、任何数值类型中的0、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了__nonzero__()或__len__()方法且方法返回0或Fal...
  • postgreSQL数据类型转换字符串和数值

    千次阅读 2020-12-30 13:23:00
    1、将数值转成字符串类型方法1:调用to_char(int, text)函数,int为要转换值,text为数值格式化模式,其中模式描述为:模式 描述9 带有指定数值位数的值0 带前导零的值.(句点) 小数点,(逗号) 分组(千)分隔符PR 尖...
  • 两种方法 都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符 或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串昀后一次 出现的位置。 字符串的索引位置是从0...
  • 【C语言】字符指针数组查找字符串

    千次阅读 2021-03-08 22:06:50
    字符串有字符数组和字符指针两种表现形式。字符数组不一定是字符串,有’\0’结束的字符数组才是字符串,但字符串一定是字符数组 3.字符串常量是个地址常量,存放在文字常量区 char s1=“abc”; char s2=“abc”; /*...
  • As we all know, c语言数据结构中的四则运算一直是一个常点,比较重要,是初学者一个必敲的代码,下面我罗列了四种数据结构四则运算,先从书(严老师)上到扩展; 严老师的数据结构上的四则运算思路是: 初始化...
  • python基本数据类型python基本数据类型1、整数和小数(浮点数)2、布尔值和空值3、字符串4、列表5、元组6、字典7、集合8、bytes类型总结 1、整数和小数(浮点数) 基本数据类型 • 数据类型指的就是变量的值的类型,也...
  • python中所有数据--布尔值,整型,浮点数,字符串,甚至大型数据结构,函数以及程序--都是以对象的形式存在的。对象有不同的类型,类型决定了可以对它进行的操作。对象的类型还决定了它承载的数据是允许被修改的变量...
  • 字符串中的空格替换为%20。样例: “abc defgx yz” 转换成 “abc%20defgx%20yz”。 当我们第一次看到题目时,肯定会想,一个空格怎么能放3个字符进去呢? 那有什么办法呢,接下来让我们一步步地分析分析。 暴力...
  • python基础之字符串

    2021-08-15 14:05:18
    文章目录一、格式化输出输入二、Python字符串1.字符串转换2.注释4.字符串查找5.字符串替换6.字符串分割7.字符串长度获取8.字符串大小写转换 # 前言 由于 Python 语言的简洁性、易读性以及可扩展性,在国内外用 ...
  • Java中的字符串常量池

    2021-03-06 23:12:53
    最近做到一个题目:问题:String str = new String(“abc”),“abc”在内存中是怎么分配的? 答案是:堆,字符串常量区。...Java中的字符串常量池Java中字符串对象创建有两种形式,一种为字面量形式,如String...
  • 1、把float/double格式化输出到字符串标准的C语言提供了atof函数把字符串转double,但是没有提供把float/double转换为字符串的库函数,而是采用sprintf和snprintf函数格式化输出到字符串。函数声明:int sprintf...
  • 数据 字符串查找函数,C语言字符串查找函数详解 在对C语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结。 使用strchr与strrchr函数查找单个字符 如果需要对...
  • Python字符串字典集合

    2020-12-20 09:37:09
    字符串定义:字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,'单引号' 或"双引号" 或 """三引号"""中间包含的内容称之为字符串创建:s ='Hello,Eva!How are you?'特性:1.按照从左到右的顺序定义字符...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 201,804
精华内容 80,721
关键字:

数据结构字符串的两种基本运算

数据结构 订阅