strncat的用法,注意要追加\0。
int main()
{
//strncmp字符串比较函数
const char* p1 = "abcdef";
const char* p2 = "abcqwer";
int ret = strncmp(p1, p2, 3);
printf("%d\n", ret);
return 0;
}
int main()
{
char* p1 = "abcdef";
char* p2 = "def";
char* ret = strstr(p1, p2);
if (ret == NULL)
{
printf("子串不存在\n");
}
else
printf("%s\n", ret);
return 0;
}
下面是仿写的字符串查找函数my_strstr,逻辑思维比较强,查找时有多种情况,例如p1较短提前结束,p1=abc,p2=abchjh。或者p1为adcbbbc,p2=bbc,查找时需要先绕过一个b,才能找到结果。又或者P2为\0。
还有解决该问题的高级算法思维,KMP算法。可以了解。
#include <stdio.h>
#include <string.h>
char* my_strstr(const char* p1, const char* p2)
{
assert(p1 != NULL);
assert(p2 != NULL);
char* str1 = p1;
char* str2 = p2;
char* cur = p1;
if (*str2 == '\0')
{
return str1;
}
while (*cur)
{
str1 = cur;
str2 = (char*)p2;
while (*str1 != '\0' && *str2 != '\0' && *str1 == *str2)//while(*str1&&*str2&&*str1 == *str2)
{
str1++;
str2++;
}
if (*str2 == '\0')
{
return cur;//找到了子串
}
if (*str1 == '\0')
{
return NULL;
}
cur++;
}
return NULL;//找不到子串
}
int main()
{
char* p1 = "abbbcdef";
char* p2 = "bbc";
char* ret = my_strstr(p1, p2);
if (ret == NULL)
{
printf("子串不存在\n");
}
else
printf("%s\n", ret);
return 0;
}
#include <stdio.h>
#include <string.h>
int main()
{
char arr[] = "[email protected]";
char* p = "@.";
char buf[1024] = { 0 };
strcpy(buf, arr);
//切割字符串
char* ret = NULL;
for (ret = strtok(buf, p); ret != NULL; ret = strtok(NULL, p))
{
printf("%s\n", ret);
}
//char* ret = strtok(arr, p);
//printf("%s\n", ret);
//ret = strtok(NULL, p);
//printf("%s\n", ret);
//ret = strtok(NULL, p);
//printf("%s\n", ret);
return 0;
}
打印数组的时候,只用写数组名就行。
标签:p2,p1,函数,ret,char,printf,字符串,操作,NULL From: https://blog.51cto.com/u_15906483/7341265