c语言系列专栏:c语言之路重点知识整合
字符串知识点:字符串基本概念、存储原理
一、字符串匹配
字符串匹配是对一个字符串进行搜索匹配另一个字符串
搜索str1字符串中是否有与str2匹配的短字符串
标准库函数strstr():
使用:
#include <stdio.h>
#include <string.h>
int main()
{
/*
字符串匹配函数 strstr()
搜索字符串在另一个字符串中首次出现的位置。
*/
char longStr[] = "TianXi Studio";
/*strstr*/
char* p = strstr(longStr, "Studio");
printf("%c\n", *p);
printf("%s\n", p);
//下标
printf("匹配的下标:%d\n", p - longStr);
return 0;
}
如果没找到:
#include <stdio.h>
#include <string.h>
int main()
{
/*
字符串匹配函数 strstr()
搜索字符串在另一个字符串中首次出现的位置。
*/
char longStr[] = "TianXi Studio";
/*strstr*/
char* p = strstr(longStr, "Studio");
//没找到
p = strstr(longStr, "Coding");//返回NULL:没找到
printf("%d %s\n", p, p); //以整数输出、以字符串输出
return 0;
}
二、strstr仿真
字符串常用于文字处理,常用且实用。因此其常用功能被封装成了一套API。可通过string.h进行使用。
通过仿真我们可以理解其函数内部工作机制的细节
定义一个my_strstr()函数,模仿strstr函数搜索字符串
不使用标准函数strstr匹配,使用自己定义的my_strstr函数
声明:
char* my_strstr(const char* str1, const char* str2);
指针方式定义:
char* my_strstr(const char* str1, const char* str2)
{
const char* p = str1;
const char* q = str2;
while (*p)
{
if (*q == *p)
{
q++; //遍历q与p比较
p++;
if (*q == '\0')
{
return p - strlen(str2);//地址差
}
}
else
{
q = str2;
p++;
}
}
return NULL;
}
调用测试:
#include <stdio.h>
#include <string.h>
char* my_strstr(const char* str1, const char* str2);
int main()
{
/*
字符串匹配函数 strstr()
搜索字符串在另一个字符串中首次出现的位置。
*/
char longStr[] = "TianXi Studio";
/*strstr*/
// char* p = strstr(longStr, "Studio");
//printf("%c\n", *p);
// printf("%s\n", p);
//下标
// printf("匹配的下标:%d\n", p - longStr);
//没找到
//p = strstr(longStr, "Coding");//返回NULL:没找到
// printf("%d %s\n", p, p); //以整数输出、以字符串输出
/*仿真字符串匹配函数 strstr */
char* p = my_strstr(longStr, "Studio");
printf("%c\n", *p);
printf("%s\n", p);
//下标
printf("匹配的下标:%d\n", p - longStr);
//没找到
p = my_strstr(longStr, "Coding");//返回NULL:没找到
// printf("%d %s\n", p, p); //以整数输出、以字符串输出
return 0;
}
运行结果:
与原先的strstr()函数比较效果相同:
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容! |