字符串操作函数详解

简介: 字符串操作函数详解


目录

求字符串长度

strlen

长度不受限制的字符串操作函数

strcpy

strcat

strcmp

长度受限制的字符串操作函数

strncpy

strncat

字符串查找函数

          strstr

字符串分割函数

strtok:


字符串长度

strlen

声明:

size_t strlen(const char *str)

介绍:

该函数是求字符串 str 长度,直到 '\0' 结束,且不包括 '\0 '。

参数:

str----要计算长度的字符串。

返回值:

返回值类型为size_t类型,相当与无符号整型,返回值为字符串str的长度。

使用:

#include<stdio.h>
#include<string.h>
int main()
{
  char arr1[20] = { "hollow" };
  printf("%d", strlen(arr1));
}

编译结果为:6

函数模拟实现:

size_t my_strlen(const char* p)
{
  assert(p);
  if (* p == '\0')
    return 0;
  return 1 + my_strlen(p+1);
}

长度不受限制的字符串操作函数

strcpy

声明:

char *strcpy(char *dest, const char *src)

介绍:

字符串拷贝函数,将字符串 src 拷贝至 dest

参数:

dest----拷贝的目的地,即目标字符串。

src----被拷贝的字符串。

返回值:

返回类型为 char*,字符串指针,返回最终目标字符串dest的指针。

注意事项:

(1)目标字符串必须可变。

(2)目标字符串的存储空间必须足够大。

(3)拷贝时会将 '\0' 拷贝上。

使用:

int main()
{
  char a[20] = { "abcdefg" };
  char b[4] = { "xxx" };
  strcpy(a, b);
  printf("%s",a);
}

编译结果:xxx

模拟实现:

char* my_strcpy(char*a,const char* b)
{
   assert(a && b);
   char* p = a;
   while (*a++ = *b++);
   return p;
}

strcat

声明:

char *strcat(char *dest, const char *src)

介绍:

字符串追加函数,将src所指向的字符串追加至dest所指向字符串的末尾,会将dest所指向字符串末尾的 '\0' 覆盖。

参数:

dest----指向目标数组,该数组包含了一个 C字符串,且足够容纳追加后的字符串指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。

src----指向要追加的字符串。

返回值:

一个指向最终目标字符串的指针

使用:

int main()
{
  char a[20] = { "hollow" };
  char b[] = { "  world" };
  strcat(a,b);
  printf("%s", a);
}

结果:hollow  world

模拟实现:

char* my_strcat(char* a, const char* b)
{
    assert(a,b);
    char* p = a;
  while (*a !=  '\0');
  {
    a++;
  }
  while (*a++ =*b++);
  return p;
}

strcmp

声明:

int strcmp(const char *str1, const char *str2)

介绍:

比较两个字符串大小,这个大小不是字符串长度,而是从第一个字符开始比较ASCII值,若相同,则继续比较下一个字符,若不同,则终止比较。


参数:

str1----进行比较的第一个字符串

str2---进行比较的第二个字符串

返回值:

str1 > str2 时返回大于0的数

str1 = str2 时返回0

str1 = str2 时返回小于0的数

使用:

int main()
{
  char a[4] = { "abc" };
  char b[4] = { "def" };
  int ret = strcmp(a, b);
  printf("%d", ret);
}

结果:-1

在vs2019编译器上,str1 >str2 时返回1,str1<str2时返回-1。但是时C标准,返回值并未规定为固定值。

模拟实现:

int my_strcmp(char* str1, char* str2)
{
  assert(str1&&str2);
  while (*str1 == *str2)
  {
    if (*str1 != '\0')
      return 0;
    str1++;
    str2++;
  }
  return *str1 - *str2;
}

长度受限制的字符串操作函数

strncpy

声明:

char *strncpy(char *dest, const char *src, size_t n)

介绍:

相对于strcpy多了一个参数,‘size_t  n ’----代表所要拷贝的字节数src 所指向的字符串复制到 dest,最多复制 n 个字节的字符(末尾不会自动补 '\0' )。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充。

参数:

  • dest -- 指向用于存储复制内容的目标数组。
  • src -- 要复制的字符串。
  • n -- 要从源中复制的字符数。

返回值:

返回类型为 char*,字符串指针,返回最终目标字符串dest的指针。

使用:

#include<stdio.h>
#include<string.h>
int main()
{
  char a[30] = { "abcdefgh" };
  char b[] = { "xxx" };
  strncpy(a, b, 3);
  printf("%s", a);
}

编译结果:xxxdefgh

strncat

声明:

char *strncat(char *dest, const char *src, size_t n)

介绍:

src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 个字符长度为止(末尾会自动补 '\0' ),当src的长度小于n时,只会追加至 n 个字符截至。(注意与strncpy的不同)

参数:

  • dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符。
  • src -- 要追加的字符串。
  • n -- 要追加的最大字符数。

返回值:

指向最终目标字符串的指针。


使用:

int main()
{
  char a[30] = { "hollow " };
  char b[] = { "world" };
  strncat(a, b, 5);
  printf("%s", a);
}

编译结果:hollow world

字符串查找函数

strstr

声明:

char *strstr(const char *haystack, const char *needle)

介绍:

在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。

参数:

  • haystack -- 要被检索的 C 字符串。
  • needle -- 在 haystack 字符串内要搜索的小字符串。

返回值:

返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 null。

使用:

int main()
{
  char a[] = { "abcd" };
  char b[] = { "efg" };
  printf("%s",strstr(a, b));
}

编译结果:(null)

模拟实现:

char * my_strstr(char* p1,  char* p2)
{
  assert(p1 && p2);
  if (!*p2)
    return p1;
  char* s1 = p1;
  char* s2 = p2;
  char* cur = p1;
  while (*cur)
  {
    s1 = cur;
    s2 = p2;
    while (*s1 && *s2 && s1 == s2)
    {
      s1++;
      s2++;
    }
    if (!*s2 )
      return cur;
    if (!*s1)
      return NULL;
    cur++;
  }
  return NULL;
}

字符串分割函数

strtok:

声明:

char *strtok(char *str, const char *delim)

介绍:

以某些分隔符为分割点,将字符串分割为多段。

参数:

str--要被分割的字符串

delim--存放分割符的字符串

返回值:

该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。当返回第一个被分解的第一个字符串后,会将分割符化为  '\0'  ,若想继续分割该段字符串,再次调用该函数,并将第一个参数改为空指针。

使用:

int main()
{
  char a[] = { "342.452*531+.345" };
  char b[] = { ".*+" };
  for (char* p = strtok(a, b); p != NULL; p = strtok(NULL, b))
  {
    printf("%s\n", p);
  }
}

编译结果:


相关文章
|
6月前
|
C++
18字符串处理函数
18字符串处理函数
25 0
字符串操作详解
字符串操作详解
|
6月前
|
索引 Python
使用字符串处理函数的文章
在编程中,字符串处理是一项常见的任务,涉及到对文本数据的各种操作,如查找、替换、分割、连接等。为了简化这些操作,许多编程语言都提供了一系列的字符串处理函数。本文将介绍一些常用的字符串处理函数,并附上相应的代码示例。
28 0
|
6月前
|
C++
c++字符串操作
c++字符串操作
57 0
C/C++字符串处理函数
C/C++字符串处理函数
字符串处理函数总结
使用字符串处理函数 注意:在使用后字符串处理函数时,应当在程序文件的开头用
82 0
|
C++ 容器
C++ 字符串操作
文章目录 1.1 C++ 字符串操作 2.2字符数组的常用操作 2.3遍历字符数组的字符 3.标准库类型string 3.1 定义和初始化 3.2 string的操作 1)读写操作 2)使用`getline`读取一整行 3)string的方法操作 4)字符串和string相加 3.3处理string对象中的字符
|
Shell 编译器 iOS开发
字符串处理函数1
一、字符数组 二、字符串处理函数