温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何用C语言模拟实现字符串函数

发布时间:2021-09-26 13:45:03 来源:亿速云 阅读:131 作者:柒染 栏目:开发技术

这期内容当中小编将会给大家带来有关如何用C语言模拟实现字符串函数,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    前言

    编程过程中经常会使用到一些字符串函数,这些字符串函数都在C语言标准库中,我们可以直接使用。但我们也要了解一下它们是如何实现的。

    模拟

    1.strlen 函数

    strlen函数是用来求字符串长度的。官方给出的解释如图

    如何用C语言模拟实现字符串函数

    返回值类型是无符号整型,参数类型是char*,遇见\0停止。

    strlen的模拟实现有三种方法,1、count计数。2、递归。3、指针减指针。

    count计数

    #include <stdio.h> int my_strlen(const char* str) {	int count = 0;	while (*str++) {	count++;	}	return count; } int main() {	char str[] = "abcdefg";	int len = my_strlen(str);	printf("%d", len);	return 0; }

    递归

    #include <stdio.h> int my_strlen( const char* str) {	if (*str == '\0') {	return 0;	}	else {	return my_strlen(++str) + 1;	} } int main() {	char str[] = "abcdefg";	int len = my_strlen(str);	printf("%d", len);	return 0; }

    指针减指针

    #include <stdio.h> int my_strlen(const char* str) {	char* p = str;	while (*p) {	p++;	}	return p - str; } int main() {	char str[] = "abcdefg";	int len=my_strlen(str);	printf("%d", len);	return 0; }

    2.strcpy 函数

    strcpy函数是字符串拷贝函数。就是把源地址字符串拷贝到目的地址去。源地址字符串必须有\0。目的地址必须足够大。源地址字符串的\0也会拷贝过去,返回目的地址的地址。

    官方解释如图

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <stdio.h> char* my_strcpy(char* dest,const char* sour) {     char* p=dest;	while (*dest++ = *sour++) {	;	}     return p; } int main() {	char sur[] = "abcdefg";	char dest[10] = { 0 };	printf("%s", my_strcpy(dest,sur));	return 0; }

    3.strcat 函数

    strcat函数是字符串追加函数。就是把源地址字符串追加到目的地址后边。要注意的是当遇见源地址的\0时停止,目的地址必须可修改,且足够大。strcat函数不能用于追加字符串自己,会越界,根本停不下来。

    官方解释如图

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <stdio.h> char* my_strcat(char* str2,const char* str1) {	char* p = str2;	while (*str2++){	;	}	str2--;	while (*str2++ = *str1++) {	;	}	return p; } int main() {	char str1[] = "abcdefg";	char str2[20]="abc";	printf("%s", my_strcat(str2, str1));	return 0; }

    4.strcmp函数

    strcmp函数是字符串比较函数,如果str1比str2大就返回正值,str1比str2小返回负值。str1=str2比较下一对字符。只要有一个遇见\0就停止。

    官方解释如图

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <stdio.h> int my_strcmp( const char* str1,const char* str2) {	while (*str1++-*str2++==0 && *str1!='\0' && str2!='\0') {	;	}	return *--str1 - *--str2; } int main() {	char str1[] = "abcdefg";	char str2[] = "bbcdef";	int a=my_strcmp(str1,str2);	printf("%d", a);	return 0; }

    5.strncpy函数

    strncpy函数是长度受限制的字符串拷贝函数,可以指定拷贝多少给字节,当给定的字节数大于要拷贝的字符串时,不够的用\0补充。

    官方解释

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <stdio.h> char* my_strncpy(char* dest,const char* sour,int num) {	char* p = dest;	while (num--) {	if (*sour != '\0') {	*dest++ = *sour++;	}	else {	*dest++ = '\0';	}	}	return p; } int main() {	char sur[] = "abcdefg";	char dest[10] = { 0 };	printf("%s", my_strncpy(dest, sur,10));	return 0; }

    6.strncat函数

    strncat函数,需要注意的一点是,字符串追加完成后目的地址斜杠零是追加完后自己补充的。所以它可以实现自己给自己 追加。

    官方解释

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <stdio.h> char* my_strncat(char* str2,const char* str1,size_t num) {	char* p = str2;	while (*str2++){	;	}	str2--;	while (num--) {	if (*str1 != '\0') {	*str2++ = *str1++;	}	}	*str2 = '\0';	return p; } int main() {	char str1[] = "abcdefg";	char str2[20]="abc";	printf("%s", my_strncat(str2, str1,6));	return 0; }

    7.strncmp函数

    strncmp函数,比较字符串,和strcmp类似只是可以确定比较前几个字符。

    官方解释

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <stdio.h> int my_strncmp( const char* str1,const char* str2,size_t num){	while (num--&& *str1++-*str2++==0 && *str1!='\0'&& str2!='\0') {	;	}	return (*--str1 - *--str2); } int main() {	char str1[] = "abcdefg";	char str2[] = "bbcdef";	int a=my_strncmp(str1,str2,5);	printf("%d", a);	return 0; }

    8.strstr函数

    strstr函数就是在一个字符串里找子字符串。

    官方解释

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <stdio.h> const char* my_strstr(const char* str1, const char* str2) {	while (*str1) {	const char* p1 = str1;	const char* p2 = str2;	while (*p1++ == *p2++) {	;	}	if (*--p2 == '\0') {	break;	}	else {	str1++;	}	}	return str1; } int main() {	char str1[] = "abbbcdefg";	char str2[] = "bcde";	int len = strlen(str2);	const char* p = my_strstr(str1, str2);	while (len--) {	printf("%c", *p++);	}	return 0; }

    9.strtok函数

    strtok函数是字符串切割函数,用的比较少也比较难懂。用的是时候要给一个用做分隔符的字符集合。strtok函数找到分隔符后将其置为0.返回一个指向该标记的指针。如果第一个参数不为空则strtok找到第一个分隔符将其置零并记录该处地址,第二次调用strtok则传一个NULL则strtok会从前一个'\0‘处往后找下一个分隔符。

    官方解释

    如何用C语言模拟实现字符串函数

    模拟实现

    #include <string.h>  #include <stdio.h>  char* my_strtok(char* str, char* demion) {     static char* p_last = NULL;     if (str == NULL && (str = p_last) == NULL)     {         return NULL;     }     char* s = str;     char* t = NULL;     while (*s != '\0')     {         t = demion;         while (*t != '\0')         {             if (*s == *t)             {                 p_last = s + 1;                 if (s - str == NULL)                 {                     str = p_last;                     break;                 }                 *s = '\0';                 return str;             }             t++;         }         s++;     }     return NULL; } int main(void) {     char str[] = "liusen,lin,lll";     char* result = NULL;     result = my_strtok(str, ",");     printf("%s\n", result);     result = my_strtok(NULL, ",");     printf("%s\n", result);     return 0; }

    上述就是小编为大家分享的如何用C语言模拟实现字符串函数了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI