目录
1.strstr函数的使用
strstr函数定义如下:
const char * strstr ( const char * str1, const char * str2 );
char * strstr ( char * str1, const char * str2 );
strstr函数是一个查找子串的函数,用法如下:
#include <stdio.h>
#include <windows.h>
int main()
{
const char* str = "12345abcdefg";
const char* src = "45abc";
printf("%s\n", strstr(str, src));
system("pause");
return 0;
}
结果如下:
2.strstr函数的模拟实现
模拟实现:
#include <stdio.h>
#include <windows.h>
#include <stdlib.h>
#include <assert.h>
char* mystrstr(const char* arr, const char* arr_src)
{
assert(arr);
assert(arr_src);
const char* p = arr;
while (*p!='\0') {
const char* move_p = p;
const char* sp = arr_src;
while (*move_p && *sp && *move_p == *sp) {
move_p++;
sp++;
}
if (*sp == '\0') {
return p;
}
else {
p++;
}
}
return NULL;
}
int main()
{
const char* str = "12345abcdefg";
const char* src = "45abc";
printf("%s\n", mystrstr(str, src));
system("pause");
return 0;
}
结果如下:
思路:
3.memmove函数使用
memmove函数是一个用于内存拷贝的函数,没有类型限制,但是memmove使用要考虑内存重叠问题,定义如下:
void * memmove ( void * destination, const void * source, size_t num );
测试用例如下:
/* memmove example */
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "memmove can be very useful......";
memmove(str + 1, str, strlen(str) - 1);
puts(str);
return 0;
}
结果如下:
4.memmove函数的模拟实现
代码如下:
void* mymemmove(void* dst, void* src, int len)
{
assert(dst);
assert(src);
char* _dst = (char*)dst;
char* _src = (char*)src;
if (_dst > _src && _dst < _src + len) {
//从右向左拷贝
_dst = _dst + len - 1;
_src = _src + len - 1;
while (len--) {
*_dst = *_src;
_dst--;
_src--;
}
}
else {
//从左向右拷贝
while (len--) {
*_dst = *_src;
_dst++;
_src++;
}
}
return dst;
}
int main()
{
char str1[32] = "hello bit!";
mymemmove(str1 + 1, str1, strlen(str1) - 1);
printf("%s\n", str1);
system("pause");
return 0;
}
结果如下:
思路: