字符函数和字符串函数详解(一)

简介: 字符函数和字符串函数详解

前言


C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。

字符串常量适用于那些对它不做修改的字符串函数.


函数介绍及模拟


strlen函数

size_t strlen ( const char * str );


1.字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中’\0’ 前面出现的字符个数(不包含 ‘\0’ )。

2.参数指向的字符串必须要以 ‘\0’ 结束。

3.注意函数的返回值为size_t,是无符号的整数。


例:


#include <stdio.h>
#include<string.h>
int main()
{
  const char*str1 = "abcdef";    //常量字符串后面默认带了个'\0'
  const char*str2 = "bbb";
  if(strlen(str2)-strlen(str1)>0)      // 6-3
  {
  printf("str2>str1\n");
  }
  else
  {
  printf("srt1>str2\n");
  }
  return 0;
}


模拟实现

size_t strlen ( const char * str );


#include<stdio.h>
size_t my_strlen(const char* str)
{
  const char* start = str;
  const char* end = str;
  while (*end != '\0')
  {
  end++;
  }
  return end - start;     //指针相减等于两指针间的元素个数
}
int main()
{
  char arr[] = "abcdef";
  int len = my_strlen(arr);
  printf("%d\n", len);
  return 0;
}


strcpy函数


char* strcpy(char * destination, const char * source );


注:前面的指针指向目标字符串,后面指针指向源字符串


1.源字符串必须以 ‘\0’ 结束。

2.将源指向的字符串复制到目标所指向的数组中,包括 ‘\0’ 字符(并在该点停止)。

3.目标空间必须足够大,以确保能存放源字符串。

4.目标空间必须可变。(常量字符串不能修改,目标空间不能是常量字符串)


#include<stdio.h>
#include<string.h>
int main()
{
  char arr[20] = "abcdef";
  char* m = "fff";
  strcpy(arr, m);
  printf("%s", arr);    
  return 0;
}

输出:fff


模拟实现

char* strcpy(char * destination, const char * source );


函数返回值为目标字符串起始地址


char* my_strcpy(char* dest, const char* src)
{
  char* ret = dest;
  while (*dest++ = *src++);  //后置加加,先解引用,再赋值,再加加,直到*dest=*src='\0',退出循环
  return ret;
}
int main()
{
  char arr1[20] = "abc";
  char arr2[] =   "hello hello";
  printf("%s\n", my_strcpy(arr1, arr2));
  return 0;
}

输出:hello hello


strncpy函数


char * strncpy ( char * destination, const char * source, size_t num );


1.拷贝num个字符从源字符串到目标空间。

2.如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

8c76aa33d6c140a89c2e45c5fa028c3f.png


我们可以看到,在拷贝完源字符串后又追加了3个0

模拟实现:


char* m_strncpy(char* destination, const char* source, size_t num)
{
  char* p = destination;
  int i = 1;
  while (*destination = *source)
  {
  destination++;
  source++;
  i++;
  }
  destination++;
  num -= i;
  while (num--)
  {
  *destination++ = '\0';
  }
  return p;
}
int main()
{
  char arr[20] = "abcdef";
  char* m = "abc";
  printf("%s", strncpy(arr, m, 6));
  return 0;
}


strcat函数


char * strcat ( char * destination, const char * source );


1.将源字符串的内容追加到目标字符串(包括 ‘\0’ ),目标中的 ‘\0’ 字符被源的第一个字符覆盖。

2.源字符串必须以 ‘\0’ 结束。

3.目标空间必须有足够的大,能容纳下源字符串的内容。

4.目标空间必须可修改。


例:


#include<stdio.h>
#include<string.h>
int main()
{
  char arr[20] = "abcdef";
  char* m = "abc";
  printf("%s", strcat(arr, m));     //函数返回值为目标字符串起始地址
  return 0;
}


输出:abcdefabc


模拟实现

char * strcat ( char * destination, const char * source );


#include<stdio.h>
char* m_strcat(char* destination, const char* source)
{
  char* p = destination;
  while (*destination++);     
  destination--;            //destination指向了\0后面的元素,所以--
  while (*destination++ = *source++);
  return p;
}
int main()
{
  char arr[20] = "abcdef";
  char* m = "abc";
  printf("%s", m_strcat(arr, m));     
  return 0;
}


strncat函数


char * strncat ( char * destination, const char * source, size_t num );


1.将源的前 num 个字符追加到目标,外加一个终止空字符。

2.如果源中 C 字符串的长度小于 num,则仅复制到终止空字符之前的内容。


类似于前面的 strncpy 这里就不展开讲了。


相关文章
|
存储 C语言
字符串函数介绍&应用(二)
字符串函数介绍&应用
|
6月前
|
C语言
字符函数和字符串函数
字符函数和字符串函数
68 0
|
C语言 Python
字符函数和字符串函数(下)
字符函数和字符串函数(下)
53 0
字符函数和字符串函数(下)
|
11月前
|
C语言
字符函数和字符串函数(上)
字符函数和字符串函数
|
11月前
|
C语言
字符函数和字符串函数(下)
字符函数和字符串函数(下)
|
11月前
详解字符函数和字符串函数-1
详解字符函数和字符串函数
41 0
|
11月前
|
C语言
详解字符函数和字符串函数-2
详解字符函数和字符串函数
48 0
|
编译器 C语言 Python
字符函数和字符串函数(上)
字符函数和字符串函数(上)
46 0
|
存储 安全
常用的字符函数和字符串函数
常用的字符函数和字符串函数
91 0