app制作费用清单,seo范畴,石家庄青园网站建设,网易企业邮箱app下载今天也是去学习了一波字符串函数#xff0c;想着也为了加深记忆#xff0c;所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。
目录
strcpy与strncpy strcat与strncat
strcmpy
strstr strcpy与strncpy
在 C 语言中想着也为了加深记忆所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。
目录
strcpy与strncpy strcat与strncat
strcmpy
strstr strcpy与strncpy
在 C 语言中 strcpy 函数用于将一个字符串复制到另一个字符串中并返回目标字符串的指针。该函数的原型如下
char* strcpy(char *dest, const char *src); 其中 dest 表示目标字符串的指针 src 表示源字符串的指针。 strcpy 函数会将源字符串的内容复制到目标字符串中并在复制结束后返回目标字符串的指针。 以下是一个简单的 strcpy 函数的模拟实现
#define _CRT_SECURE_NO_WARNINGS 1
#includeassert.h
char* My_strcopy(char* dest,const char* src)
{ char* ret dest;assert(dest ! NULL);assert(src!NULL);while(*dest *src);return ret;
} 在这个模拟实现中我们首先检查目标字符串和源字符串是否为空指针如果为空指针则返回空指针。然后我们使用一个循环将源字符串的内容逐个复制到目标字符串中。最后返回目标字符串的指针。 需要注意的是这个模拟实现只适用于源字符串和目标字符串的长度较小的情况。在实际使用中建议使用标准库中的 strcpy 函数以确保代码的可移植性和正确性。 这样可能又有人问那我不想全部复制过去我只想赋值前n个字符串那怎么实现呢其实在这个库函数也有人创造出来过了它就是strncpy它也就比strcpy多一个n。下面是其解析与模拟与解析
strncpy 函数是 C 语言中的内置函数之一相较于 strcpy 函数它使用更加灵活功能更加强大。strncpy 函数将字符串源的前 num 个字符复制到目标字符串中返回目标字符串的指针。它的语法形式为 char *strncpy(char *destination, const char *source, size_t num) 需要注意的是 strncpy 函数在复制字符串时不会在目标字符串的末尾添加空字符 \0 除非源字符串的长度小于 num 。如果源字符串的长度大于等于 num 则会将源字符串的前 num 个字符复制到目标字符串中。如果源字符串的长度小于 num 则会将源字符串的所有字符复制到目标字符串中并在目标字符串的末尾添加 num 减源字符串长度个空字符 \0 。 下面是一个简单的 strncpy 函数的模拟实现
char* My_strncpy(char* dest, const char* src, int num)
{char* tmp dest;while (num (*dest *src))num--;if (num)while (num--)*dest \0;return tmp;
}
int main()
{int num 0;char arr1[10] { \0 };char arr2[10] { \0 };printf(input?the?dest:\n);gets(arr1);printf(input?the?scr:\n);gets(arr2);printf(input?the?copy?num:);scanf(%d, num);char* ret My_strncpy(arr1, arr2, num);printf(%s\n, ret);
} 在这个示例中我们定义了一个 my_strncpy 函数来模拟 strncpy 函数的行为。在 my_strncpy 函数中我们使用一个 while 循环来复制源字符串的字符到目标字符串中直到复制的字符数达到 num 或者遇到源字符串的结束字符 \0 。然后如果 num 不为零我们使用另一个 while 循环将目标字符串的剩余部分填充为空字符 \0 。最后我们返回目标字符串的指针。 在 main 函数中我们定义了两个长度为10的字符数组 arr1 和 arr2 并使用 gets 函数获取用户输入的字符串。然后我们使用 scanf 函数获取要复制的字符数并调用 my_strncpy 函数将源字符串的前 num 个字符复制到目标字符串中。最后我们使用 printf 函数输出复制后的目标字符串。 strcat与strncat
strcat 函数和 strncat 函数都是 C 语言标准库中的字符串操作函数用于字符串的拼接和拷贝下面是对它们的解析与模拟实现 1. strcat 函数 - 函数声明 char *strcat(char *strDestination, const char *strSource) 。 - 函数功能将源字符串拼接到目标字符串的末尾并返回拼接后的目标字符串的首地址。 - 注意事项目标字符串的空间必须足够大且以 \0 结尾源字符串必须以 \0 结尾拼接后的字符串末尾也会自动添加 \0 。 - 模拟实现
#include stdio.h
#include stdlib.h
#include assert.h
char * my_strcat(char * dest, const char * src)
{assert(dest);assert(src);char * ret dest;while (*dest)dest;while (*dest *src);return ret;
}
int main()
{char a[20] abcd;char b[5] efgh;my_strcat(a, b);printf(%s\n, a);system(pause);return 0;
}2. strncat 函数 - 函数声明 char *strncat(char *strDestination, const char *strSource, size_t count) 。 - 函数功能将源字符串的前 count 个字符拼接到目标字符串的末尾并返回拼接后的目标字符串的首地址。 - 注意事项目标字符串的空间必须足够大且以 \0 结尾源字符串必须以 \0 结尾 count 表示需要拼接的字符个数如果 count 大于源字符串的长度则拼接有效字符后在目标字符串末尾添加 \0 如果 count 小于源字符串的长度则拼接有效字符后在目标字符串末尾添加 \0 。 - 模拟实现
#include stdio.h
#include stdlib.h
#include assert.h
char* my_strncat(char* dest, const char* src, size_t count)
{assert(dest);assert(src);char* ret dest;while (*dest)dest;while (count--){if (*src)*dest *src;elsebreak;}*dest \0;return ret;
}
int main()
{char a[20] abc;char b[5] efgh;my_strncat(a, b, 3);printf(%s\n, a);system(pause);return 0;
}当然上述代码只是一种模拟实现真正的 strcat 和 strncat 函数会对参数进行更严格的检查并处理各种边界情况以确保程序的稳定性和安全性。 strcmpy strcmp 是一个用于比较字符串大小的函数其函数原型为
int strcmp(const char *str1, const char *str2)
该函数会将两个字符串中的字符一个一个比较直到一方比另一方大或者小若直到 \0 都相等则会返回0。注意其返回值
第一个大于第二个 返回大于0的数字 第一个等于第二个 返回等于0的数字 第一个小于第二个 返回小于0的数字 以下是一个 strcmp 函数的模拟实现 // 模拟实现
int My_strcmp(const char* str1, const char* str2)
{assert(str1 str2);while (*str1 *str2){if (*str1 \0)return 0;str1;str2;}return (*str1 - *str2);
}int main()
{int ret 0;char str1[10] dijshdf;char str2[10] fuhdsud;retMy_strcmp(str1, str2);printf(%d\n, ret);return 0;
} 代码解析首先使用 const 对 str1 和 str2 进行修饰保护并对 str1 与 str2 进行断言保护然后使用循环并解引用 str1 和 str2 并判断其是否相等如果相等则循环继续 str1 并且 str2 直到遇到 \0 此时返回0若发现 str1 与 str2 解引用后不相等则返回 *str1-*str2 。 strstr strstr 函数的作用是在一个字符串str1中查找另一个字符串str2的首次出现位置并返回该位置的指针。其函数原型为 char*strstr(char*str1, const char*str2) 以下是对该函数的解析与模拟实现 1. 函数解析 - str1 被查找的目标字符串。 - str2 要查找的子字符串。 - 返回值若 str2 是 str1 的子串则返回 str2 在 str1 中首次出现的地址如果 str2 不是 str1 的子串则返回 NULL 。 2. 模拟实现 该函数返回子串在目标串中第一次出现的地址
char* My_strstr(const char* str1, const char* str2)
{assert(str1 str2);const char* s1 str1;const char* s2 str2;const char* p str1;while (*p){s1 p;s2 str2;while (*s1 ! \0 *s2 ! \0 *s1 *s2){s1;s2;}if (*s2 \0){return (char*)p;}p;}return NULL;
}int main()
{char arr1[] hello橘子真甜~;char arr2[] hello橘子;char* ret My_strstr(arr1, arr2);if (ret NULL){printf(子串不存在\n);}else {printf(字串存在%s\n, ret);}return 0;
} 在上述代码中首先使用 const 对 str1 和 str2 进行修饰保护并对 str1 与 str2 进行断言保护然后使用循环并解引用 str1 和 str2 并判断其是否相等如果相等则循环继续 str1 并且 str2 直到遇到 \0 此时返回 p 的地址若发现 str1 与 str2 解引用后不相等则返回 NULL 。 文章已到篇尾请各位多多支持。