• [C/C++基础--笔试突击] 2.字符串


    概述:

      字符串是由零个或多个字符组成的有限序列。

      子串:串中任意个连续的字符组成的子序列。

      字符串是最常见和常考的一种类型,有很多演化的问题,例如最长公共子序列等,这里就不介绍了,只了解一下相关的基本知识和标准库的一些函数。

    2.1 C风格字符串

    包含两种:

    1)字符串常量:以双引号括起来的字符序列是字符串常量。为了兼容C语言,C++所有的字符串常量都由编译器自动在末尾添加一个空字符

    :字符常量'A'表示单个字符A,然后"A"是字符串常量,其表示字母A和空字符(null)两个字符。

    2)末尾添加了''的字符数组。

    C++语言通常用char*/const char*类型的指针来操纵C语言中的字符串,一般来说,我们使用指针的算术操作来遍历C风格字符串,直到到达结束符null为止。

    const char *cp = "hello world";
    while(*cp) {
    //...
    cp++;  
    }

    注:最后的''会转化为十进制的0,因此可以用while(*cp)来判断。

    举个小例子,可以以此来求得字符串的长度:

    int len(char *x) {
        char *y = x;
        while(*y++);  // 一直走到null
        return (y - x - 1); // 同类型指针相减 返回值为距离
    }

    2.2 标准库中提供的字符串处理函数

    C/C++提供了众多的字符串处理函数,下表介绍了主要的一些函数:

     strlen(s)

     返回s的长度,不包括字符串结束符null

     strcmp(s1,  s2)

     比较两个字符串s1和s2是否相同。若相等,返回0;若s1大于s2,返回正数;否则返回负数。

     strcat(s1, s2)

     将字符串s2连接到s1后,返回s1

     strcpy(s1, s2)

     将s2复制给s1,并返回s1 

     strncat(s1,s2,n)

     将s2的前n个字符连接到s1后面,并返回s1

     strncpy(s1,s2,n)

     将s2的前n个字符复制给s1,并返回s1

    再弄清楚两个容易混淆的函数:

    1)memcpy

    void *memcpy(void *dest, const void *src, size_t n);

    功能:从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。函数返回指向dest的指针。

    2)memset

    void *memset(void *s, int ch, size_t n);

    功能:将s中前n个字节用ch替换并返回s,作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作最快的一种方法。

    下面写一个知识点:

    strcpy和memcpy的区别

    1.复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。

    2.复制的方法不同。strcpy不需要指定长度,遇到被复制字符串的结束符''才结束,所以容易溢出。memcpy则根据第三个参数来决定复制的长度。

    3.用途不同。通常在复制字符串的时候用strcpy,其他类型的时候用memcpy。

    字符串的基本知识就复习到这里了,字符串的实际应用时最广泛的,这就要好好的研究算法了,希望大家能记住这部分的知识~。~

    返回目录 -> C/C++基础知识概述

  • 相关阅读:
    C# DataTable 和List之间相互转换的方法
    毫秒级百万数据分页存储过程(mssql)
    lambdas vs. method groups
    关于优化C#程序的五十种方法
    Retrieving failed records after an SqlBulkCopy exception
    将数字按照3位一组添加逗号的正则替换
    生成互不相同随机数的一种算法
    2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(教程详情)
    2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(目录)
    JMeter接口压力测试课程入门到高级实战
  • 原文地址:https://www.cnblogs.com/TinyBobo/p/4724336.html
Copyright © 2020-2023  润新知