往期文章
- C语言:初识C语言
- C语言:分支语句和循环语句
- C语言:函数
- C语言:数组
- C语言:操作符详解
- C语言:指针详解
- C语言:结构体
- C语言:数据的存储
前言
今天来盘一下字符函数和字符串函数。
C语言中对字符和字符串的处理很是频繁,但是C语言本身是没有字符串类型的,字符串通常放在 常量字符串 中或者 字符数组 中。 字符串常量 适用于那些对它不做修改的字符串函数。
1. 函数介绍
1.1 strlen
注意,strlen的返回值是无符号整数
1.2 strcpy
1.3 strcat
1.4 strcmp
1.5. strncpy
1.6 strncat
1.7 strncmp
1.8 strstr
1.8 strtok
1.9 strerror
1.10 memcpy
1.11 memmove
1.12 memcmp
2. 库函数的模拟实现
2.1 strcpy的模拟实现
#include<stdio.h>
#include<assert.h>
void my_strcpy(char *dest,const char *src)
{
assert(dest != NULL);
assert(src != NULL);
while (*dest++ = *src++)
{
;
}
*dest = *src;
}
int main()
{
char arr1[20] = "********************";
char arr2[] = "hello";
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
2.2 stract 的模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strcat(char *dest,char *src)
{
assert(dest);
assert(src);
char *ret = dest;
while (*dest)
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = "hello";
char arr2[] = "world";
printf("%s\n", my_strcat(arr1, arr2));
return 0;
}
2.3 strmcp的模拟实现
#include<stdio.h>
#include<assert.h>
int my_strcmp(char *s1, char *s2)
{
assert(s1);
assert(s2);
while (*s1 == *s2)
{
if (*s1 == '\0')
return 0;
s1++;
s2++;
}
return *s1 - *s2;
}
int main()
{
char arr1[20] = "hello";
char arr2[] = "world";
printf("%d\n", my_strcmp("abd", "abp"));
return 0;
}
2.4 strstr的模拟实现
#include<stdio.h>
#include<assert.h>
char* my_strstr(const char *s1, const char *s2)
{
assert(s1&&s2);
char *cp = s1;
while (*cp)
{
char *p1 = cp;
char *p2 = s2;
while (*p1!='\0'&&*p2!='\0'&&*p1 == *p2)
{
p1++;
p2++;
}
if (*p2 == '\0')
{
return cp;
}
cp++;
}
return NULL;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "bcd";
char *ret = my_strstr(arr1, arr2);
if (ret != NULL)
printf("%s\n", ret);
else
printf("找不到\n");
return 0;
}
2.5 memcpy的模拟实现
void * memcpy ( void * dst, const void * src, size_t count)
{
void * ret = dst;
assert(dst);
assert(src);
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
return(ret);
}
2.6 memmove的模拟实现
void * memmove(void * dst, const void * src, size_t count)
{
void * ret = dst;
if (dst <= src || (char *)dst >= ((char *)src + count)) {
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst + 1;
src = (char *)src + 1;
}
}
else {
/*
* Overlapping Buffers
* copy from higher addresses to lower addresses
*/
dst = (char *)dst + count - 1;
src = (char *)src + count - 1;
while (count--) {
*(char *)dst = *(char *)src;
dst = (char *)dst - 1;
src = (char *)src - 1;
}
}
return(ret);
}
后记
本篇博客就分享到这里啦,希望对大家有所帮助。事实证明,我暑假还没有好好做人。文章来源:https://www.toymoban.com/news/detail-666988.html
文章来源地址https://www.toymoban.com/news/detail-666988.html
到了这里,关于C语言:字符函数和字符串函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!