如何用C语言编写函数,将字符串转换为长尾?

2026-04-10 08:571阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2372个文字,预计阅读时间需要10分钟。

如何用C语言编写函数,将字符串转换为长尾?

目录一. 常用字符串函数介绍

1.strlen

2.strcpy

3.strcmp

4.strcat

5.strstr

二. 模拟实现常用字符串函数

1.strlen

2.strcpy

3.strcmp

4.strcat

5.strstr

一. 常用字符串函数介绍

1.strlen

字符串长度函数,用于获取字符串的长度。

2. strcpy字符串复制函数,用于将一个字符串复制到另一个字符串。

3. strcmp字符串比较函数,用于比较两个字符串。

4. strcat字符串连接函数,用于将一个字符串连接到另一个字符串的末尾。

5. strstr字符串搜索函数,用于在字符串中查找子字符串。

二. 模拟实现常用字符串函数

1.strlen

字符串长度函数,用于获取字符串的长度。

2. strcpy字符串复制函数,用于将一个字符串复制到另一个字符串。

3. strcmp字符串比较函数,用于比较两个字符串。

4. strcat字符串连接函数,用于将一个字符串连接到另一个字符串的末尾。

5. strstr字符串搜索函数,用于在字符串中查找子字符串。



目录

一.常用字符串函数介绍

1.strlen

2. strcpy

3.strcmp

4.strcat

5.strstr

二.模拟实现常用字符串函数

1.strlen

2.strcpy

3.strcmp

4.strcat

5.strstr


一.常用字符串函数介绍

1.strlen

字符串strlen是用来求字符串长度的,我们可以打开cpp网站查看有关信息

该函数用来求字符串长度,求的是‘\0’之前字符的个数,函数参数为字符指针,因为该函数不需要修改字符串的值,故为了保护字符串被意外修改,设置为只读,所以在参数字符指针用const修饰,返回值即为字符串的长度,

下面以经典helloworld字符串为例:

输出结果:

字符串arr1为“helloworld”,一个10个字符,该字符串长度则为10,输出结果正确

2. strcpy

字符串函数strcpy是用来拷贝字符串的,即将一个字符串的内容拷贝到另一个字符串中,而且会将该字符的'\0'也拷贝到另一个字符串中,我们打开cpp网站查看该函数的有关信息

该函数的参数为两个字符指针,一个指向目标字符串,一个指向源字符串,由于只需要修改目标字符串,故用const修饰源字符串以防止误修改,函数返回值是目标字符串的首地址

下面以经典helloworld字符串为例:

输出结果:

可以看到我们将arr2中的helloworld成功地拷贝到了arr1中,但特别值得注意的是,当目标字符串空间不够时,强行拷贝比空间更大的字符串,虽然也可以输出结果,但毕竟是越界访问,会引发一些不可估计的问题,如将本例的arr1大小由10改为5:

可以看到程序运行后,虽然正常地打印出了结果,但是程序出错了

3.strcmp

字符串函数strcmp函数是用来比较两个字符串大小的,但是并不是比较两个字符串的大小,而是比较字符串的内容,如果第一个字符串小于第二个字符串,则返回一个小于0的值,大于则返回一个大于0的值,等于则返回0,如“hello”和“hellz”,前面的字符都相等,‘o’小于‘z’,故"hello"小于“hellz”,如“hellx”和"hella",前面的字符都相等,'x'大于'a',所以“hellx”大于“hella”

打开cpp网站查看该函数的相关信息

该函数的参数为两个字符指针,由于比较不需要修改字符串,所以两个参数都用const修饰以防误修改返回值为int型,比较的结果为小于则为小于0的值,大于则为大于0的值,等于则为0

下面以经典的helloworld字符串为例

输出结果:

4.strcat

字符串函数strcat是用来连接两个字符串的,即将源字符串连接到目标字符串后面,连接的步骤是先找到目标字符串的末尾‘\0’,然后再进行拷贝,所以与strcpy的区别就在于要从目标字符串的末尾开始拷贝

打开cpp网站查看该函数的相关信息:

该函数的参数为两个字符指针,由于源字符串不需要修改,故加上const修饰以防误修改,返回值为连接后的字符串的地址,即目标字符串的地址

下面以经典的helloworld字符串为例:

输出结果

可以看到我们成功地将arr2的“world”连接到arr1的“hello”中,于是arr1便变成了“helloworld”,与拷贝函数类似,特别值得注意的是,目标字符串要有足够大的空间,否则强行连接的话会出现一些未知的错误

我们将上例的arr1的大小改为8:

输出结果:

可以看到虽然正常输出了,但是程序报错了

5.strstr

字符串函数strstr是查找函数,在字符串中查找子串并返回子串在字符串第一次出现的地址,如果找不到子串则返回NULL

打开cpp网站查看该函数的相关信息

该函数的参数为两个字符指针。由于查找并不需要修改两个字符串的内容,所以两个字符指针都用const修饰,返回值为子串在字符串中第一次出现的地址

如何用C语言编写函数,将字符串转换为长尾?

下面以经典的helloworld字符串为例:

输出结果:

可以看到“llo”可以在“helloworld”中找到,并返回指向“llo”’的地址,将改地址用%s打印,则从llo开始打印 ,即为lloworld

二.模拟实现常用字符串函数

1.strlen

my_strlen模拟实现库函数strlen。参数为const char *,返回值为int型,即为字符串的长度,利用遍历字符串的方法,直到‘\0’结束遍历

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int my_strlen(const char* str) { int len = 0;//定义长度,初始化为0 while (*str != '\0')//从头开始遍历字符串,直到'\0'结束 { len++; str++; } return len;//返回字符串的长度 } int main() { char arr1[] = "helloworld"; int ret = my_strlen(arr1); printf("%d", ret); return 0; }

2.strcpy

利用my_strcpy模拟实现库函数strcpy,依次赋值,直到源字符串遍历到'\0"结束赋值,并返回预留的目标字符串的地址

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char* my_strcpy(char* str1, const char* str2) { char* p = str1; //定义一个p指针保存str1,以便函数结束时返回 while (*str1 = *str2)//依次赋值,直到*str2为'\0'结束 { str1++; str2++; } return p;//返回预留的指针P } int main() { char arr1[20] = {0}; char arr2[] = "helloworld"; char *str = my_strcpy(arr1,arr2); printf("%s", str); return 0; }

3.strcmp

利用my_strcmp函数模拟实现库函数strcmp,依次遍历比较,如果遇到不相等的情况则直接return返回,如果两个字符串相等,则遍历到'\0'再返回0

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int my_strcmp(const char* str1, const char* str2)/*要是不相等,下面的return会结束循环, 要是相等,则遍历到'\0'才结束*/ { while (*str1 != '\0' || *str2 != '\0') { if (*str1 < *str2) //小于则返回-1 return -1; else if (*str1 > *str2)//大于则返回1 return 1; else if (*str1 == *str2)//相等则继续比较后面的字符 { str1++; str2++; } } return 0;//只有相等才会执行到这一步,即相等返回0 } int main() { char arr1[] = "helloworla"; char arr2[] = "helloworld"; int ret = my_strcmp(arr1,arr2); printf("%d", ret); return 0; }

4.strcat

利用my_strcat函数模拟实现库函数strcat,先找到目标字符串的末尾‘\0’,然后从'\0'处依次赋值,直达遍历到源字符串的末尾'\0'

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char* my_strcat(char* str1, const char* str2) { char* p = str1;//保存连接字符串的地址,以便函数结束时返回 while (*str1 != '\0')//遍历找到str1的'\0'处 { str1++; } while (*str1 = *str2)//从str1的'\0'处依次赋值,直到遍历到str2的'\0'结束 { str1++; str2++; } return p;//返回连接后字符串的地址 } int main() { char arr1[20] = "hello"; char arr2[] = "world"; char *str = my_strcat(arr1,arr2); printf("%s", str); return 0; }

5.strstr

利用my_strstr函数模拟实现库函数strstr,设置两个指针分别指向两个字符串,再设置一个指针P指向当前开始比较的字符的位置,直到遍历到子串的'\0'位置则已找到子串并返回子串的位置,循环节后仍咩=没有找到子串则说明找不到子串,返回NULL

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char* my_strstr(const char* str1, const char* str2) { const char* s1 = str1;//定义s1指向第一个字符串 const char* s2 = str2;//定义s2指向第二个字符串 const char* p = str1;//定义p指向第一个字符串当前开始比较的字符 while (*p) { s1 = p; //从p处开始比较 s2 = str2;//从头开始比较 while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)//判断遍历字符是否相等 { s1++; s2++; } if (*s2 == '\0')//如果是因为*s2为'\0'结束,则证明找到子串,返回子串的位置 return p; p++;//一轮比较后没有找到子串,则从下一个字符开始比较 } return NULL; } int main() { char arr1[] = "helloworld"; char arr2[] = "llo"; char *str = my_strstr(arr1,arr2); printf("%s", str); return 0; }



本文共计2372个文字,预计阅读时间需要10分钟。

如何用C语言编写函数,将字符串转换为长尾?

目录一. 常用字符串函数介绍

1.strlen

2.strcpy

3.strcmp

4.strcat

5.strstr

二. 模拟实现常用字符串函数

1.strlen

2.strcpy

3.strcmp

4.strcat

5.strstr

一. 常用字符串函数介绍

1.strlen

字符串长度函数,用于获取字符串的长度。

2. strcpy字符串复制函数,用于将一个字符串复制到另一个字符串。

3. strcmp字符串比较函数,用于比较两个字符串。

4. strcat字符串连接函数,用于将一个字符串连接到另一个字符串的末尾。

5. strstr字符串搜索函数,用于在字符串中查找子字符串。

二. 模拟实现常用字符串函数

1.strlen

字符串长度函数,用于获取字符串的长度。

2. strcpy字符串复制函数,用于将一个字符串复制到另一个字符串。

3. strcmp字符串比较函数,用于比较两个字符串。

4. strcat字符串连接函数,用于将一个字符串连接到另一个字符串的末尾。

5. strstr字符串搜索函数,用于在字符串中查找子字符串。



目录

一.常用字符串函数介绍

1.strlen

2. strcpy

3.strcmp

4.strcat

5.strstr

二.模拟实现常用字符串函数

1.strlen

2.strcpy

3.strcmp

4.strcat

5.strstr


一.常用字符串函数介绍

1.strlen

字符串strlen是用来求字符串长度的,我们可以打开cpp网站查看有关信息

该函数用来求字符串长度,求的是‘\0’之前字符的个数,函数参数为字符指针,因为该函数不需要修改字符串的值,故为了保护字符串被意外修改,设置为只读,所以在参数字符指针用const修饰,返回值即为字符串的长度,

下面以经典helloworld字符串为例:

输出结果:

字符串arr1为“helloworld”,一个10个字符,该字符串长度则为10,输出结果正确

2. strcpy

字符串函数strcpy是用来拷贝字符串的,即将一个字符串的内容拷贝到另一个字符串中,而且会将该字符的'\0'也拷贝到另一个字符串中,我们打开cpp网站查看该函数的有关信息

该函数的参数为两个字符指针,一个指向目标字符串,一个指向源字符串,由于只需要修改目标字符串,故用const修饰源字符串以防止误修改,函数返回值是目标字符串的首地址

下面以经典helloworld字符串为例:

输出结果:

可以看到我们将arr2中的helloworld成功地拷贝到了arr1中,但特别值得注意的是,当目标字符串空间不够时,强行拷贝比空间更大的字符串,虽然也可以输出结果,但毕竟是越界访问,会引发一些不可估计的问题,如将本例的arr1大小由10改为5:

可以看到程序运行后,虽然正常地打印出了结果,但是程序出错了

3.strcmp

字符串函数strcmp函数是用来比较两个字符串大小的,但是并不是比较两个字符串的大小,而是比较字符串的内容,如果第一个字符串小于第二个字符串,则返回一个小于0的值,大于则返回一个大于0的值,等于则返回0,如“hello”和“hellz”,前面的字符都相等,‘o’小于‘z’,故"hello"小于“hellz”,如“hellx”和"hella",前面的字符都相等,'x'大于'a',所以“hellx”大于“hella”

打开cpp网站查看该函数的相关信息

该函数的参数为两个字符指针,由于比较不需要修改字符串,所以两个参数都用const修饰以防误修改返回值为int型,比较的结果为小于则为小于0的值,大于则为大于0的值,等于则为0

下面以经典的helloworld字符串为例

输出结果:

4.strcat

字符串函数strcat是用来连接两个字符串的,即将源字符串连接到目标字符串后面,连接的步骤是先找到目标字符串的末尾‘\0’,然后再进行拷贝,所以与strcpy的区别就在于要从目标字符串的末尾开始拷贝

打开cpp网站查看该函数的相关信息:

该函数的参数为两个字符指针,由于源字符串不需要修改,故加上const修饰以防误修改,返回值为连接后的字符串的地址,即目标字符串的地址

下面以经典的helloworld字符串为例:

输出结果

可以看到我们成功地将arr2的“world”连接到arr1的“hello”中,于是arr1便变成了“helloworld”,与拷贝函数类似,特别值得注意的是,目标字符串要有足够大的空间,否则强行连接的话会出现一些未知的错误

我们将上例的arr1的大小改为8:

输出结果:

可以看到虽然正常输出了,但是程序报错了

5.strstr

字符串函数strstr是查找函数,在字符串中查找子串并返回子串在字符串第一次出现的地址,如果找不到子串则返回NULL

打开cpp网站查看该函数的相关信息

该函数的参数为两个字符指针。由于查找并不需要修改两个字符串的内容,所以两个字符指针都用const修饰,返回值为子串在字符串中第一次出现的地址

如何用C语言编写函数,将字符串转换为长尾?

下面以经典的helloworld字符串为例:

输出结果:

可以看到“llo”可以在“helloworld”中找到,并返回指向“llo”’的地址,将改地址用%s打印,则从llo开始打印 ,即为lloworld

二.模拟实现常用字符串函数

1.strlen

my_strlen模拟实现库函数strlen。参数为const char *,返回值为int型,即为字符串的长度,利用遍历字符串的方法,直到‘\0’结束遍历

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int my_strlen(const char* str) { int len = 0;//定义长度,初始化为0 while (*str != '\0')//从头开始遍历字符串,直到'\0'结束 { len++; str++; } return len;//返回字符串的长度 } int main() { char arr1[] = "helloworld"; int ret = my_strlen(arr1); printf("%d", ret); return 0; }

2.strcpy

利用my_strcpy模拟实现库函数strcpy,依次赋值,直到源字符串遍历到'\0"结束赋值,并返回预留的目标字符串的地址

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char* my_strcpy(char* str1, const char* str2) { char* p = str1; //定义一个p指针保存str1,以便函数结束时返回 while (*str1 = *str2)//依次赋值,直到*str2为'\0'结束 { str1++; str2++; } return p;//返回预留的指针P } int main() { char arr1[20] = {0}; char arr2[] = "helloworld"; char *str = my_strcpy(arr1,arr2); printf("%s", str); return 0; }

3.strcmp

利用my_strcmp函数模拟实现库函数strcmp,依次遍历比较,如果遇到不相等的情况则直接return返回,如果两个字符串相等,则遍历到'\0'再返回0

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> int my_strcmp(const char* str1, const char* str2)/*要是不相等,下面的return会结束循环, 要是相等,则遍历到'\0'才结束*/ { while (*str1 != '\0' || *str2 != '\0') { if (*str1 < *str2) //小于则返回-1 return -1; else if (*str1 > *str2)//大于则返回1 return 1; else if (*str1 == *str2)//相等则继续比较后面的字符 { str1++; str2++; } } return 0;//只有相等才会执行到这一步,即相等返回0 } int main() { char arr1[] = "helloworla"; char arr2[] = "helloworld"; int ret = my_strcmp(arr1,arr2); printf("%d", ret); return 0; }

4.strcat

利用my_strcat函数模拟实现库函数strcat,先找到目标字符串的末尾‘\0’,然后从'\0'处依次赋值,直达遍历到源字符串的末尾'\0'

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char* my_strcat(char* str1, const char* str2) { char* p = str1;//保存连接字符串的地址,以便函数结束时返回 while (*str1 != '\0')//遍历找到str1的'\0'处 { str1++; } while (*str1 = *str2)//从str1的'\0'处依次赋值,直到遍历到str2的'\0'结束 { str1++; str2++; } return p;//返回连接后字符串的地址 } int main() { char arr1[20] = "hello"; char arr2[] = "world"; char *str = my_strcat(arr1,arr2); printf("%s", str); return 0; }

5.strstr

利用my_strstr函数模拟实现库函数strstr,设置两个指针分别指向两个字符串,再设置一个指针P指向当前开始比较的字符的位置,直到遍历到子串的'\0'位置则已找到子串并返回子串的位置,循环节后仍咩=没有找到子串则说明找不到子串,返回NULL

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> char* my_strstr(const char* str1, const char* str2) { const char* s1 = str1;//定义s1指向第一个字符串 const char* s2 = str2;//定义s2指向第二个字符串 const char* p = str1;//定义p指向第一个字符串当前开始比较的字符 while (*p) { s1 = p; //从p处开始比较 s2 = str2;//从头开始比较 while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)//判断遍历字符是否相等 { s1++; s2++; } if (*s2 == '\0')//如果是因为*s2为'\0'结束,则证明找到子串,返回子串的位置 return p; p++;//一轮比较后没有找到子串,则从下一个字符开始比较 } return NULL; } int main() { char arr1[] = "helloworld"; char arr2[] = "llo"; char *str = my_strstr(arr1,arr2); printf("%s", str); return 0; }