标头 <string.h>下定义的字符串操作函数(中)

标头 <string.h>下定义的字符串操作函数(中)

目录

1.strncpy的使用和模拟实现

使用

模拟实现

2.strncat的使用和模拟实现

使用

模拟实现

3.strncmp的使用和模拟实现

使用

模拟实现

4.strchr的使用和模拟实现

使用

模拟实现

5.strcoll的使用和模拟实现

使用

模拟实现


1.strncpy的使用和模拟实现

描述

C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充

声明

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

参数

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

返回值

该函数返回最终复制的字符串

使用

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[100] = {0};
    char arr2[] = "hello";
    strncpy(arr1,arr2,3)
    printf("%s\n",arr1); 
    return 0;
}

模拟实现

#include <stdio.h>
char* my_strncpy(char* des, char* res, int x)
{
	char* ret = des;
	assert(res);
	assert(des);
	int i = 0;
	while (i++ < x)
	{
		*des++ = *res++;
	}
	return ret;
}
int main()
{
	char arr1[100] = { 0 };
	char arr2[] = "hello";
	int ret = 3;
	my_strncpy(arr1, arr2, ret);
	printf("%s\n", arr1);
	return 0;
}

2.strncat的使用和模拟实现

描述

C 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止

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

参数

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

返回值

该函数返回一个指向最终的目标字符串 dest 的指针

使用

#include <stdio.h>
#include <string.h>
int main()
{
    char arr1[100] = "hello";
    char arr2[] = "bro******";
    strncat(arr1,arr2,3);
    printf("%s\n",arr1);
    return 0;
}

模拟实现

#include <stdio.h>
char* my_strncat(char* arr1, const char* arr2, int ret)
{
	char* r = arr1;
	while (*arr1)
	{
		arr1++;
	}
	//数组arr1到达临界
	while (ret--)
	{
		*arr1++ = *arr2++;
	}
	return r;
}
int main()
{
	char arr1[100] = "hello";
	char arr2[] = "bro******c";
	int ret = 3;
	my_strncat(arr1, arr2, ret);
	printf("%s\n", arr1);
	return 0;
}

3.strncmp的使用和模拟实现

描述

strncmp() 是一个标准库函数,用于比较两个字符串的前 n 个字符是否相等

strncmp() 函数通常用于比较两个字符串,以确定它们是否相等或哪个字符串在字典顺序上更小

C 库函数 int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字符

声明

int strncmp(const char *str1, const char *str2, size_t n)

参数

  • str1 -- 要进行比较的第一个字符串
  • str2 -- 要进行比较的第二个字符串
  • n -- 要比较的最大字符数

返回值

该函数返回值如下:

  • 如果返回值 < 0,则表示 str1 小于 str2
  • 如果返回值 > 0,则表示 str1 大于 str2
  • 如果返回值 = 0,则表示 str1 等于 str2

使用

#include <stdio.h>
#include <string.h>
int main ()
{
   char arr1[15] = "abcdef";
   char str2[15] = "ABCDEF";
   int ret;
   ret = strncmp(str1, str2, 4);
   if(ret < 0)
   {
      printf("str1 小于 str2");
   }
   else if(ret > 0)
   {
      printf("str2 小于 str1");
   }
   else
   {
      printf("str1 等于 str2");
   }
   return 0;
}

模拟实现

#include <stdio.h>
int my_strncmp(char* arr1, char* arr2, int ret)
{
	assert(arr1);
	assert(arr2);
	while (ret--)
	{
		if (*arr1 > *arr2)
		{
			return +1;
		}
		else if (*arr1 < *arr2)
		{
			return -1;
		}
		arr1++;
		arr2++;
	}
	return 0;
}
int main()
{
	char arr1[] = "abcdef";
	char arr2[] = "abcref";
	int ret = 2;
	int num = my_strncmp(arr1, arr2, ret);
	if (num == +1)
	{
		printf("大于");
	}
	else if (num == -1)
	{
		printf("小于");
	}
	else
	{
		printf("等于");
	}
	return 0;
}

4.strchr的使用和模拟实现

描述

strchr() 用于查找字符串中的一个字符,并返回该字符在字符串中第一次出现的位置

strchr() 其原型定义在头文件 <string.h> 中, char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置

strchr() 函数返回的指针指向字符串中的字符,如果要将该指针用作字符串,应该将其传递给其他字符串处理函数,例如 printf() 或 strncpy()

声明

char *strchr(const char *str, int c)

参数

  • str -- 要查找的字符串
  • c -- 要查找的字符

返回值

如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,如果未找到该字符则返回 NULL

使用

#include <stdio.h>
#include <string.h>
int main ()
{
    char arr[] = "hello world";
    char ch = 'o';
    char * ptr = strchr(str, ch);
    if (ptr != NULL) 
    {
        printf("字符 'o' 出现的位置为 %ld\n", ptr - arr + 1);
    } 
    else 
    {
        printf("没有找到字符 'o' 。\n");
    }
    return 0;
}

模拟实现

#include <stdio.h>
char* my_strstr(const char* str1, const char* str2)
{
	const char* cur = str1;
	const char* s1 = NULL;
	const char* s2 = NULL;
	assert(str1 && str2);
	if (*str2 == '\0')
	{
		return (char*)str1;
	}
	while (*cur)
	{
		s1 = cur;
		s2 = str2;
		while (*s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return (char*)cur;
		}
		cur++;
	}
	return NULL;
}
int main()
{
	char arr1[] = "abbbcdef";
	char arr2[] = "bbc";
	char* ret = my_strstr(arr1, arr2);
	if (ret != NULL)
		printf("%s\n", ret);
	else
		printf("找不到\n");
	return 0;
}

5.strcoll的使用和模拟实现

描述

C 库函数 int strcoll(const char *str1, const char *str2) 把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置

声明

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

参数

  • str1 -- 要进行比较的第一个字符串
  • str2 -- 要进行比较的第二个字符串

返回值

该函数返回值如下:

  • 如果返回值 < 0,则表示 str1 小于 str2
  • 如果返回值 > 0,则表示 str2 小于 str1
  • 如果返回值 = 0,则表示 str1 等于 str2

实例

下面的实例演示了 strcoll() 函数的用法

使用

#include <stdio.h>
#include <string.h>
int main ()
{
   char str1[15];
   char str2[15];
   int ret;
   strcpy(str1, "abc");
   strcpy(str2, "ABC");
   ret = strcoll(str1, str2);
   if(ret > 0)
   {
      printf("str1 大于 str2");
   }
   else if(ret < 0) 
   {
      printf("str2 小于 str1");
   }
   else 
   {
      printf("str1 等于 str2");
   }
   return 0;
}

模拟实现

#include <stdio.h>
int my_strcoll(char* arr1, char* arr2)
{
	while (arr1 && arr2)
	{
		if (arr1 > arr2)
		{
			return +1;
		}
		else if (arr1 < arr2)
		{
			return -1;
		}
		else
		{
			;
		}
		arr1++;
		arr2++;
	}
	return 0;
}

int main()
{
	char arr1[] = "abc";
	char arr2[] = "ABC";
	int ret = my_strcoll(arr1, arr2);
	switch (ret)
	{
		case 1:
		{
			printf("大于");
			break;
		}
		case -1:
		{
			printf("小于");
			break;
		}
		case 0:
		{
			printf("等于");
		}
	}
	return 0;
}

转载请说明出处内容投诉
CSS教程_站长资源网 » 标头 <string.h>下定义的字符串操作函数(中)

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买