前言

  • 对于字符串的操作,操作起来有点痛苦,今天我就做一篇关于字符串操作和几种不同结构的操作方法,以便之后的操作。

字符串的性质

  1. 字符串是有零个或多个字符顺序排列所组成的线性表
  2. S=“a0 a1 a2 a3 …… an-1 \0”用单引号或双引号括起来的叫做串值
  3. 串结束符'\0',n是串的长度,它不包括作为分界符的符号,也不包括串结束符'\0'。注意区别空白串和空串,空白串长度不为0,空串反之。
  4. 空串是任意串的子串;任一串是它自身的子串,除它本身外,任意子串都是它的真子串。

字符串的初始化和赋值

  1. 例如char *s, st[10];创建一个字符串指针和一个字符串数组。则st = “hello”是不合法的,s = “hello”是合法的。
  2. 在做字符串初始化时,若使用char s[10] = {‘h’,’e’,’l’,’l’,’o’,’\0’};或char s[10] = “Hello!”;都是合法的。但是要注意串的长度不要越界。
  3. 防止越界,char s[] = {‘h’,’e’,’l’,’l’,’o’};或char s[] = “Hello!”;编译器会更具字符串中实际的字符个数来定义数组的大小,包括最后的'\0'
  4. 注意字符数组间是不能整体赋值的

    char s1[10] = ‘Hello!’, s2[10];
    s2 = s1;

  5. 如果使用字符串的指针,则指针保存的是串值的首地址。正确的写法应该是char *s1 = "Hello!";char *s1; s1 = "hello"错误的写法。char *s1; *s1 = "Hello";这种写法试图将“hello”串值赋值给指针s1。


C语言中有关字符串的库函数String.h

  • 字符串int strcpy(char *dest, char *src)函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*
    *将src字符串中的内容复制到dest
    * 如果len(dest) < len(src)长度将对src的内容进行截取
    * */
    char dest[] = "old";
    char src[] = "new";

    strcpy(dest, src);

    cout << "dest:" << dest << endl;
    cout << "src:" << src << endl;
    return 0;

  • int strncpy(char *dest, char *src, int n)字符串部分复制,将字符串的
    src前n个字符串覆盖到字符串dest的前n个字符。
    1
    2
    3
    4
    5
    6
    7
    8
    /*
    *字符串部分复制,将字符串的src前n个字符串覆盖到字符串dest的前n个字符。
    * */
    char dest[] = "goodboy", src[] = "bad boy";

    strncpy(dest, src, 4);

    cout << "dest:" << dest << endl;

  • int strcat(char *dest, char *src)将字符串src连接到dest后,src中的内容保持不变

  • int stncat(char *dest, char *src, int n)将特定数量的字符串连接到另一字符串

    1
    2
    3
    char dest[] ="hello", src[] = "hua";
    strncat(dest, src, 2);
    cout << "dest:" << dest << endl;
  • char *_strdup(char *s1)为字符串s1内容分配另外一块不同的空间。
    当采用_strdup函数时,内容一致,但所存放的内存有所不同

    1
    2
    3
    4
    5
    6
    7
    char s1[] ="hello", *s2;
    printf("%x\n", s1);
    //s2 = _strdup(s1);
    s2 = s1;
    printf("%x\n", s2);

    printf("s1:%s\ns2:%s", s1, s2);

参考链接

留言

⬆︎TOP