0
点赞
收藏
分享

微信扫一扫

字符串的使用和剖析(2):

#define _CRT_SECURE_NO_WARNINGS 1 
#include <stdio.h>
#include<string.h>
#include<assert.h>

//长度受限制的字符串函数介绍:
//(1)strncpy:
//char * strncpy ( char * destination, const char * source, size_t num ); num:要复制的字符串长度

//char* my_strncpy(char* dest,const char* src, int len)
//{
// assert(dest && src);
// char* p = dest;
// while (len && (*dest++= *src++))
// {
// len--;
// }
// if (len != 0)
// while (--len)
// *dest++ = '\0';
// return p;
//}
//int main()
//{
// char arr1[22] = "good offer";
// char arr2[] = "very good good offer";
// int len=strlen(arr2);
// char* p = my_strncpy(arr1,arr2,len); //拷贝len个就拷贝len个,不拷贝\0
// printf("%s\n", p);
//
// char arr3[22] = "good offer";
// char arr4[]="bit";
// strncpy(arr3,arr4,6); //此时拷贝 bit\0\0\0; 必须复制n个长度过去
// printf("%s", arr3);
// return 0;
//}

//(2):strncat函数:
//char * strncat ( char * destination, const char * source, size_t num );
//追加完之后,后面主动存放\0,

//char* my_strncat(char* dest,const char* src, int n)
//{
// assert(dest && src);
// char* p = dest;
// while(*dest++)
// {
// ;
// }
// dest--;
// while (n--)
// if (!(*dest++ = *src++))
// return p;
// *dest = '\0';
// return p;
//}
//int main()
//{
// char arr1[22] = "very\0xxxxxxxxxxxxxxxx";
// char arr2[] = " good offer";
// char* p = my_strncat(arr1, arr2, 15);
// printf("%s\n", p);
//
// //char arr1[22] = "good offer";
// //char arr2[]="bit";
// //strncat(arr1,arr2,6); //此时追加 bit\0; 遇\0就不追加了
// //printf("%s", arr1);
// return 0;
//}

//(3):strncmp函数:
//int strncmp ( const char * str1, const char * str2, size_t num );

//int my_strncmp(const char* str1, const char* str2, int num)
//{
// if (!num)
// return 0;
// assert(str1 != NULL && str2 != NULL);
//
// while ((--num!=0) && *str1!='\0' && *str2!='\0' && *str1 == *str2)
// {
// str1++;
// str2++;
// }
// return *str1 - *str2;
//}
//int main()
//{
// const char* p1 = "loveme";
// char* p2 = "loveyou";
// int ret = my_strncmp(p1, p2, 5);
// printf("%d\n", ret);
// return 0;
//}

//(4)strstr函数:查找子字符串函数:
//char * strstr ( const char * str1, const char * str2 );

char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
char* p1;
char* p2;
char* start = (char*)str1;

if (*str2 == '\0')
return start;

while (*start)
{
//p1 = (char*)str1; //错误:目的字符串每次要往后面移一位
p1 = start;
p2 = (char*)str2;
while ((*p1!='\0') && (*p2!='\0') && (*p1 == *p2))
{
p1++;
p2++;
}
if (*p2=='\0')
{
return start; //找到字串
}
if (*p1 == '\0')
{
return NULL;
}
start++;
}
return NULL; //找不到字串
}
int main()
{
char* p1 = "llove me";
char* p2 = "love";
char* p = my_strstr(p1, p2);
printf("%s\n", p);
return 0;
}

举报

相关推荐

0 条评论