C语言字符串函数模拟实现流程介绍

目录
  • 一、strlen
    • 1.使用计数器
    • 2.使用函数递归
    • 3.使用指针-指针
  • 二、strcpy
  • 三、strcat
  • 四、strcmp

该文章将简易模拟实现strlen、strcpy、strcat、strcmp、strstr。那么让我们废话少说,直接开始吧。

一、strlen

strlen-Get string length.即获取字符串长度。函数参数为 const char* str,函数返回类型为 size_t。如下图所示:

strlen函数的读取结束标志为’\0’,因此,若字符串中没有’\0’,字符串长度则为随机值。

下面将以三种方式模拟实现strlen函数,函数将命名为 my_strlen。

1.使用计数器

#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
	assert(str);//断言一下传过来的参数是否为空指针
	size_t count = 0;//设置一个计数器
	while (*str++)
	{
		count++;
	}
	return count;
}
int main()
{
	char arr[] = "hello world!";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

显示结果:

该方法为设置一个计数器变量 count,让计数器在指针每增加一个字节时自增一,当 *str 为’\0’时,循环结束,返回的count就是字符串长度。

2.使用函数递归

#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
	assert(str);
	if (*str != '\0')
		return 1 + my_strlen(str + 1);
	else
		return 0;
}
int main()
{
	char arr[] = "hello world!";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

显示结果:

3.使用指针-指针

#include <stdio.h>
#include <assert.h>
size_t my_strlen(const char* str)
{
	assert(str);
	const char* start = str;
	const char* end = str;
	while (*end != '\0')
	{
		end++;
	}
	return end - start;
}
int main()
{
	char arr[] = "hello world!";
	int ret = my_strlen(arr);
	printf("%d\n", ret);
	return 0;
}

显示结果:

二、strcpy

strcpy-Copy string.即拷贝字符串。函数参数为 char* dest 和 const char* scr,函数返回类型为 char*。如下图所示:

源字符串必须以’\0’结束,目标字符串会将’\0’一同拷贝

下面将模拟实现strcpy,函数命名为my_strcpy

#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* dest, const char* scr)
{
	assert(dest);
	assert(scr);
	char* start = dest;//记录目标指针的起始位置
	while (*dest++ = *scr++)
	{
		;
	}
	return start;
}
int main()
{
	char arr1[20] = "xxxxxxxxxxxxxxxxxxx";
	char arr2[] = "hello world!";
	printf("%s\n", my_strcpy(arr1, arr2));
	return 0;
}

显示结果:

三、strcat

strcat-Concatenate strings.即连接字符串。函数参数为 char* dest 和 const char* scr,函数返回类型为 char*。如下图所示:

源字符串必须以’\0’结束,否则程序将崩溃。

下面将模拟实现strcat,函数命名为my_strcat

#include <stdio.h>
#include <assert.h>
char* my_strcat(char* dest, const char* scr)
{
	assert(dest);
	assert(scr);
	char* start = dest;
	while (*dest != '\0')
	{
		dest++;//先将目标指针遍历到'\0'的位置上
	}
	while (*dest++ = *scr++)
	{
		;
	}
	return start;
}
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world!";
	printf("%s\n", my_strcat(arr1, arr2));
	return 0;
}

显示结果:

四、strcmp

strcmp-Concatenate strings.即比较两个字符串。函数参数为 const char* str1 和 const char* str2,函数返回类型为 int。如下图所示:

标准规定:

1. str1>str2,返回值>0

2. str1==str2,返回值=0

3. str1<str2,返回值<0

下面将模拟实现strcmp,函数命名为my_strcmp

#include <stdio.h>
#include <assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1);
	assert(str2);
	while (*str1 == *str2)
	{
		if (*str1 != '\0')//两个字符串对应元素相等并都不为'\0'时,遍历这个字符串
		{
			str1++;
			str2++;
		}
		else
			return 0;//此为直到两个字符串结束都相等,所以返回0
	}
	return *str1 - *str2;//不相等时返回两个字符串对应元素的差值即可判断大小。
}
int main()
{
	char arr1[] = "abc";
	char arr2[] = "abcd";
	int ret = my_strcmp(arr1, arr2);
	if (ret > 0)
	{
		printf("arr1>arr2\n");
	}
	else if (ret < 0)
	{
		printf("arr1<arr2\n");
	}
	else
		printf("arr1==arr2\n");
	return 0;
}

显示结果:

到此这篇关于C语言字符串函数模拟实现流程介绍的文章就介绍到这了,更多相关C语言字符串函数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C语言之从字符数组中删除特定的字符

    从字符数组中删除特定的字符,即输入要删除的指定字符,利用for循环找到非指定字符,将非指定字符输出即可.以下为具体的实现方法: #include<stdio.h> int main() { char str[100],c; int j,k; printf("please input a string:"); gets(str); printf("\nEnter a character:"); c=getchar(); for(j=k=0;str[j]!=

  • C语言中关于计算字符串长度的几种方式

    目录 计算字符串长度的几种方式 自定义函数 使用string头文件中的strlen()函数 使用sizeof()操作符 计算字符串长度,使用sizeof和strlen的坑 使用strlen计算 使用sizeof计算 计算字符串长度的几种方式 C语言计算字符串长度,可以手动计算也可以使用库函数或者sizeof()操作符. 自定义函数求长度 使用strlen()函数 使用sizeof()操作符 自定义函数 int cont_str(char *s) {     int i = 0;        

  • 浅析C语言中的数组及字符数组

    我们来编写一个程序,以统计各个数字.空白符(包括空格符.制表符及换行符)以及所有其它字符出现的次数.这个程序的实用意义并不大,但我们可以通过该程序讨论 C 语言多方面的问题. 所有的输入字符可以分成 12 类,因此可以用一个数组存放各个数字出现的次数,这样比使用 10 个独立的变量更方便.下面是该程序的一种版本: #include <stdio.h> /* count digits, white space, others */ main() { int c, i, nwhite, nothe

  • c语言字符数组与字符串的使用详解

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串在c语言中,将字符串作为字符数组来处理.(c++中不是)在实际应用

  • C语言字符串与字符数组面试题中最易错考点详解

    目录 一.'\0'对字符串与字符数组的重要性 二.strlen与sizeof有什么区别 三.含转义字符求字符串长度 本文介绍字符串与字符数组中最易错的3个考点.若以后遇到其他相关的易错点,会持续补充更新. 一.'\0'对字符串与字符数组的重要性 #include<stdio.h> #include<string.h> //下面代码,打印结果是什么? int main(){ char arr1[] = "abc"; char arr2[] = { 'a', 'b'

  • C语言超全面讲解字符串函数

    目录 1.gets函数 2.puts函数 3.strcat函数 4.strcpy函数(strncpy函数) 5.strcmp函数(strncmp函数) 6.strlen函数 7.strlwr函数 8.strupr函数 9.strstr函数 注意:在使用字符串处理函数时,一定要使用#include <string.h>开头 1.gets函数 其形式为:gets(字符数组)——输入字符串的函数 作用是从终端输入一个字符串到字符数组,并且得到一个函数值. 2.puts函数 其形式为:puts(字符数

  • C语言字符串函数,字符函数,内存函数使用及模拟实现

    目录 求字符串长度 strlen 长度不受限制的字符串函数 strcpy strcat strcmp 长度受限制的字符串函数 strncpy strncat strncmp 字符串查找函数 strstr strtok strerror 字符函数 字符分类函数 字符转换函数 内存操作函数 memcpy memmove memcmp memset 求字符串长度 strlen 函数功能 字符串长度,求一个字符串中字符的个数(不包含’\0’). 函数参数: size_t strlen( const ch

  • 一波C语言字符数组实用技巧集锦

    字符数组倒序 #include <stdio.h> void daoxu(char str[]){ int i; char temp; for(i = 0; i < strlen(str) / 2 ; i ++){ temp = str[i]; str[i] = str[strlen(str) - i-1]; str[strlen(str) - i-1] = temp; } } 单词计数    int wordCount(char str[]){ int i; int count = 0

  • C语言中的字符串数据在C中的存储方式

    目录 内存中的五大区域 字符串数据在C语言中有两种存储方式 几个比较容易混的点 统计字符串中某一个字符出现的次数 使用字符指针数组来存储多个字符串数据 内存中的五大区域 栈:是专门用来存储局部变量的,所有的局部变量都是声明在栈区域中 堆:允许程序员手动的从堆申请指定字节数的空间来使用 BSS段:是用来存储未初始化的全局变量和静态变量,声明一个全局变量,如果我们没有初始化,在程序运行最开始的时候,这个全局变量是没有初始化的,存储在BSS段[程序运行后系统就自动的初始化为0,并把初始化后的全局变量存

  • C语言字符串函数操作(strlen,strcpy,strcat,strcmp)详解

    目录 一.strlen函数模拟 二. strcpy函数模拟  三.strcat函数模拟 四.strcmp函数模拟 总结 一.strlen函数模拟 字符串以'\0'作为结束标志,strlen函数返回的是在字符串中'\0'前面出现的字符个数(不包括'\0'); 有三种方法可以实现该操作: ①计数器方式 ②不能创建临时变量计数器 ③指针-指针  方法一:计数器方式 int my_strlen(const char* str) { int count = 0;//定义count用来记录字符串数组中字符数

  • C语言字符串函数操作(strlen,strcpy,strcat,strcmp)详解

    目录 一.strlen函数模拟 二. strcpy函数模拟 三.strcat函数模拟 四.strcmp函数模拟 总结 一.strlen函数模拟 字符串以‘\0’作为结束标志,strlen函数返回的是在字符串中‘\0’前面出现的字符个数(不包括‘\0’); 有三种方法可以实现该操作: ①计数器方式 ②不能创建临时变量计数器 ③指针-指针 方法一:计数器方式 int my_strlen(const char* str) { int count = 0;//定义count用来记录字符串数组中字符数 w

  • C语言字符串函数与内存函数精讲

    目录 strlen strcpy strcat strcmp strncpy strncat strncmp strstr strtok strerror tolower\toupper memcpy memmove memcmp memset strlen 获取字符串长度. strlen - size_t strlen( const char *string ); 1.字符串以’\0’作为结束标志,strlen函数返回的是在字符串中’\0’前面出现的字符个数(不包含’\0’). 2.参数指向的

  • C语言字符串函数介绍与模拟实现详解

    目录 2. strcpy(复制字符串) 2.1 strncpy函数 2.2 模拟实现strcpy 3. strcat (追加字符) 3.1 strncat 函数 3.2 模拟实现strcat 4. strcmp(比较两个字符串内容) 4.1 strncmp函数 4.2 模拟实现strcmp 5. strstr (返回str1出现在str2位置处第一次的指针) 5.1 模拟实现strstr 6. strtok(分割字符串) 总结 1. strlen(求字符串长度) 这个函数就是求一个字符串的长度.

  • 基于C语言字符串函数的一些使用心得

    就字符串的拼接函数为例strcat.原型:extern char *strcat(char *dest,char *src);用法:#include <string.h>功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'.说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串.      返回指向dest的指针.举例: 复制代码 代码如下: // strcat.c      #include <syslib.h&

  • c语言main函数使用及其参数介绍

    每一C程序都必须有一main()函数,可以根据自己的爱好把它放在程序的某个地方.有些程序员把它放在最前面,而另一些程序员把它放在最后面,无论放在哪个地方,以下几点说明都是适合的. 在Turbo C2.0启动过程中,传递main()函数三个参数:argc,argv和env.* argc:整数,为传给main()的命令行参数个数.* argv:字符串数组.char* argv[],我们可以看出,argv的类型是char* [],即是一个指向字符数组的指针,所以我们还可以写作:char** argv.

  • C语言字符串函数入门

    目录 实现字符串库函数功能 1.strlen函数 2.strcmp函数 3.strcpy函数 4.strcat函数 5.strupr函数 6.strlwr函数 总结 实现字符串库函数功能 有些时候我们可能会被限制无法使用库函数,这个时候我们需要编写自己的库函数.但了解了字符串库函数的功能之后,想要实现并不困难,今天我们用数组和循环来简单实现几个字符串库函数的功能. 1.strlen函数 strlen函数使用来求字符串长度的,遇到\0就会停止,并返回字符串的长度,接下来根据这个特性来编写一下我们自

  • 解析smarty 截取字符串函数 truncate的用法介绍

    smarty truncate 截取字符串从字符串开始处截取某长度的字符,默认的长度为80指定第二个参数作为截取字符串的长度默认情况下,smarty会截取到一个词的末尾,如果需要精确到截取多少个字符可以使用第三个参数,将其设为"true"具体用法如下: 复制代码 代码如下: //index.php $smarty = new Smarty; $smarty->assign('articleTitle', 'Two Sisters Reunite after Eighteen Ye

  • C语言进阶教程之字符函数&字符串函数

    目录 1.strlen 1.1.三种模拟实现 2.长度不受限制的字符串函数 2.1.strcpy 2.1.1.模拟实现 2.2.strcat 2.2.1.模拟实现 2.3.strcmp 2.3.1.模拟实现 3.长度受限制的字符串函数 3.1.strncpy 3.1.1.模拟实现 3.2.strncat 3.2.1.模拟实现 3.3.strncmp 3.3.1.模拟实现 4.字符串查找 4.1.strstr 4.1.1.模拟实现 4.2.strtok 5.错误信息报告 5.1.strerror

随机推荐