【笔记】C语言的字符串

前言

C语言的字符串学习笔记

字符串的初始化

  • 字符串的初始化和输入输出

传送门

引入头文件

1
#include <string.h>

获取字符串长度

  • 返回字符串长度
    • 只会处理字节的长度,所以中文并不会算做1个字符,而是由字符编码集决定
  • 不包含字符串末尾的'\0'字符

<str>:字符串变量

1
strlen(<str>)

字符串追加(字符串合并)

  • 将第二个字符串追加到第一个字符串末尾
  • 要求:前一个字符串的空间需要大于等于两个字符串长度的总和+1,否则会造成溢出

<str_1>:前一个字符串
<str_2>:后一个字符串

1
strcat(<str_1>, <str_2>);

字符串有限追加

  • 只在第一个字符串末尾追加指定长度的第二个字符
  • 防止因为第一个字符串空间不够造成溢出

<num>:第二个字符串需要作为追加字符串的长度

1
strncat(<str_1>, <str_2>, <num>);

字符串比较

  • 比较两个字符串是否相同
  • 返回0表示相同,非0表示不相同
1
strcmp(<str_1>, <str_2>);

字符串有限比较

  • 只比较前几个字符

<num>:指定比较几个字符

1
strncmp(<str_1>, <str_2>, <num>);

字符串拷贝

  • 把第二个字符串拷贝到第一个字符串中
1
strcopy(<str_1>, <str_2>);

字符串有限拷贝

  • 只拷贝指定长度的字符串

<num>:指定拷贝的长度

1
strncopy(<str_1>, <str_2>, <num>);

不超长度的拷贝

  • 指定的长度为第一个字符串的长度
1
strncopy(<str_1>, <str_2>, sizeof(<str_1>-1));

输出字符串

输出到标准输出设备

  • 把一个字符串输出到标准输出设备

<str>:字符串

1
printf("%s", <str>);

输出到字符数组

  • 把一个字符串输出到另一个字符串

<arr>:输出到的字符数组

1
sprintf(<arr>, "%s", <str>);

输入字符串

从标准输入设备输入

  • 从标准输入设备输入为字符串

<str>:输入到的变量

1
scanf("%s", <str>);

从字符数组中输入

  • 从一个字符串中输入为另一个字符串

<arr>:从字符数组中输入
&i&j:输入到的变量

1
2
3
char <arr>[4] = "1+2";
int i, j;
sscanf(<arr>, "%d+%d", &i, &j);

查找子串

通过首字符查找子串

  • 返回从指定字符开始到原字符串末尾的子字符串
  • 如果不存在返回NULL(空指针)

<str>:需要查找的字符串
<char>:可能会出现的子串的首字符

1
strchar(<str>, '<char>');

通过字符串查找子串

  • 返回从指定字符串开始到原字符串末尾的子字符串
  • 如果不存在返回NULL(空指针)

<str_son>:可能会出现的子串的首字符串

1
strstr(<str>, "<str_son>");

字符串分割

  • strtok函数会返回指针
  • strtok第一次调用需要指定需要分割的字符串
  • strtok第二次及以后的调用只需要传递NULL
  • strtok最后一次调用后继续调用,会返回空
1
2
3
char *s;
s = strtok(<str>, "_");
s = strtok(NULL, "_");

遍历分割后的字符串

1
2
3
4
5
6
char *s;
s = strtok(<str>, "_");
while (s)
{
s = strtok(NULL, "_");
}

完成