字符串函数

1.模拟实现

strncpy

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char* my_strncpy(char* dest, const char* src, int n)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while (n)
{
*dest = *src;
dest++;
src++;
n--;
}
if (*(dest - 1) != '\0')
{
dest = '\0';
}
return ret;
}
int main()
{
int num = 0;
char arr1[20] = {" "};
char* arr2 = "abcdefg";
printf("请输入要拷贝的字符个数:\n");
scanf("%d", &num);
printf("%s\n", my_strncpy(arr1, arr2,num));
system("pause");
return 0;
}
//strncat

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char* my_strncat(char* dest, const char* src, int n)
{
assert(dest != NULL);
assert(src != NULL);
char* ret = dest;
while (*dest)
{
dest++;
}
while (n)
{
*dest = *src;
dest++;
src++;
n--;
}
if (*(dest - 1) != '\0')
{
dest = '\0';
}
return ret;
}
int main()
{
char str1[20] = { "abcd" };
char* str2 = "abcdefghijklm";
int num=0;
printf("请输入要连接的字符个数:\n");
scanf("%d", &num);
printf("%s\n", my_strncat(str1, str2, num));
system("pause");
return 0;
}


//strncmp


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int my_strncmp(const char* str1, const char* str2, int n)
{
assert(str1 != NULL);
assert(str2 != NULL);
int ret = 0;
while (n)
{
if (!(ret = *(unsigned char*)str1 - *(unsigned char*)str2) && *str2)
{
str1++;
str2++;
}
if (ret<0)
{
return ret = -1;
}
else if (ret>0)
{
return ret = 1;
}
n--;
}
return ret;
}
int main()
{
char* str1 = "abcdefhui";
char* str2 = "abcghijklm";
int num=0;
int result = 0;
printf("请输入要连接的字符个数:\n");
scanf("%d", &num);
result = my_strncmp(str1, str2, num);
if (result == 1)
{
printf("前%d位str1比str2大\n", num);
}
else if (result == -1)
{
printf("前%d位str1比str2小!\n",num);
}
else
{
printf("str1和str2前%d位相等!\n", num);
}
system("pause");
return 0;
}

2.模拟实现

strchr


#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char *my_strchr(const char *s, char c)
{
assert(s != NULL);
assert(c != NULL);
char* ret=NULL;
while (*s)
{
if (*s == c)
{
ret = s;
break;
}
s++;
}
return ret;
}
int main()
{
char str[] = { "aabsdrfisklossp" };
char s = '0';
char*p = NULL;
printf("请输入要查找的字符:\n");
scanf("%c", &s);
p = my_strchr(str, s);
if (p != NULL)
{
printf("str中%c首次出现的位置:%s\n", s, p);
}
else
{
printf("str中没有%c!\n", s);
}
system("pause");
return 0;
}


//strrstr:字符串中查找指定字符串最后一次出现的位置。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
char *strrstr(char *str1, char *str2)
{
assert(str1 != NULL);
assert(str2 != NULL);
char*cp = str1;
char *cp1=NULL;
if (*str2 == '\0')
{
return str1;
}
while (*cp)
{
char* s1 = cp;
char*substr = str2;
while ((*s1 == *substr) && *substr&&*s1)
{
s1++;
substr++;
}
if (*substr == '\0')
{
cp1 = cp;
}
cp++;
}
return cp1;
}
int main()
{
char arr1[] = "abcdabrfabuhabjkl";
char* p = "ab";
char* ret = NULL;
ret = strrstr(arr1, p);
if (ret != NULL)
{
printf("abcdabrfabuhabjkl中ab最后一次出现的位置:%s\n",ret);
}
else
{
printf("abcdabrfabuhabjkl中没有ab!\n");
}
system("pause");
return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值