首页 > 其他分享 >strncmp/strstr 模拟实现

strncmp/strstr 模拟实现

时间:2023-07-24 16:24:34浏览次数:44  
标签:strncmp p2 p1 strstr str2 str1 char const 模拟

const char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
if (!*str2)//逆反逻辑,非0为真,假假为真
return str1;
const char* p1 = NULL;//不改变str1 和str2
const char* p2 = NULL;
const char* start = str1;
while (*start)
{
p1 = start;//p1需要记住与str2字符相同的那个位置
p2 = str2;//p2初始化,用于下次匹配
while (*p1 && *p2 && !(*p1 - *p2))//逆反逻辑,非0为真,假假为真
{
p1++;
p2++;
}
if (!*p2)//逆反逻辑,非0为真,假假为真
{
return start;//找到了
}
if (!*p1)//p1 字符串小于p2
{
return NULL;
}
start++;
}
return NULL;//找不到
}
int main()
{
const char* p1 = "abcdddefabcdef";
const char* p2 = "def";
//const char* ret = strstr(p1, p2);
const char* ret = my_strstr(p1, p2);

if (ret == NULL)
{
printf("不存在\n");
}
else
printf("%s\n", ret);
return 0;
}
int my_strncmp(const char* str1, const char* str2,size_t count)
{
while (count && *str1 == *str2)
{
if (*str1 == '\0')
return 0;
count--;
str1++;
str2++;
}
return(*str1 - *str2);
}
int main()
{
const char* p1 = "abcdef";
const char* p2 = "abcdwe";
//int ret = strcmp(p1, p2);
//int ret = strncmp(p1, p2,3);
int ret = my_strncmp(p1, p2, 5);

printf("%d\n", ret);
return 0;
}

标签:strncmp,p2,p1,strstr,str2,str1,char,const,模拟
From: https://www.cnblogs.com/zrk-8008/p/17577532.html

相关文章

  • C语言模拟银行排队叫号系统(链队)
    一.队列队列是一种具有先进先出(FIFO)特性的线性数据结构,它只允许在队列的两端进行插入和删除操作。队列的一端称为队尾(rear),另一端称为队头(front)。新元素总是插入在队列的队尾,而从队列中删除元素时则总是删除队头元素。由于队列具有FIFO特性,因此队列通常用于需要按照顺序处理数据的场......
  • CSP模拟3 <反思>
    t3:不要随便用mapt4:代码转移要删全首先考虑暴力,类似线段树,首先你要先dfs出每个节点子树的左右节点,然后修改查询时要考虑左儿子右边界是否大于查询左边界,右儿子左边界是否小于查询有边界,进行\(dfs\)\((46pts)\)点击查看代码#include<bits/stdc++.h>#defineintlonglongu......
  • CSP 模拟 3
    今天感觉很热,但是天气转凉的时候我也该退役了吧。今日推歌:透明哀歌-n-buna/Gumiecho-Crusher-P/GumiEnglish歌词Theclockstoppedticking,时钟停止发出嘀嗒声Foreverago.在很久以前HowlonghaveIbeenup?我究竟醒来了多久?Idon'tknow.我不知道Ican't......
  • CSP 模拟 2
    感觉像是noi模拟赛多了个pT1F咋做都行,但是考场上的正确做法被后来优化RE了,痛失60pts其中一种做法是考虑只有\(a_1\oplusb_i\)有可能成为答案,然后验证即可T2S定义dp状态\(f_{i,j,k,0/1/2}\)为用了\(i\)个红球,\(j\)个绿球,\(k\)个红球,并且最后一位是什么球......
  • java 爬虫模拟登陆 拿到cookies
    实现Java爬虫模拟登录获取Cookies概述在这篇文章中,我将教你如何使用Java编程语言实现爬虫模拟登录并获取Cookies。爬虫模拟登录是一种常见的网络爬虫技术,它可以模拟用户登录网站,获取登录后才能访问的资源。流程概览下面是整个模拟登录获取Cookies的流程概览:步骤描述......
  • 模拟飞行开发任务进度
    第一周(截止2023.7.23上午)任务主要进度:跟着做的案例为Stack-O-Bot,有官方的文档以及游戏教学过程,比较适合新手进行学习,根据官方给的教学,大体上复现了他的效果。正在学习蓝图类模型,类似于图形化的编程界面?编程的重点是逻辑的设计,需要考虑好每一个过程的关系以及物理过程(这个在......
  • Qt(5.8.0)-Cmd模拟(纯手写)
    以下是对上述Qt程序的详细博客,使用Markdown的代码块方式呈现:Qt编程:实现一个简单的命令行窗口Qt是一种跨平台的C++应用程序开发框架,可以用于开发各种类型的应用程序,包括图形界面(GUI)应用程序。本文将介绍如何使用Qt框架实现一个简单的命令行窗口,类似于Windows的运行框,用户可以在......
  • 「赛后总结」20230722 CSP 模拟赛
    「赛后总结」20230722CSP模拟赛点击查看目录目录「赛后总结」20230722CSP模拟赛反思题解T1回文思路代码T2快速排序思路代码T3混乱邪恶思路代码T4校门外歪脖树上的鸽子思路吓死我了我还以为K8He不更博了。为啥前天模拟赛不写啊?打过,没参加。为啥昨天模拟赛不......
  • strlen/strcpy/strcat的模拟实现
    char*my_strcat(char*dest,constchar*src){ assert(dest!=NULL);//字符串要以‘\0’结束,目标空间要足够大,且可修改 assert(src!=NULL); char*ret=dest; //1,找到目的字符串的\0; while(*dest!='\0') { dest++; } //2,追加 while(*dest++=*src++) { ; } returnr......
  • CSP模拟3
    A.回文\(20\)多分的纯暴力搜索,\(A_{i,j}=A_{i-1,j+1}\)可以判完回文直接递推出路径数,共\(42\text{pts}\)。正解\(DP\)。回文可以转化一下思路,两个人分别从\((1,1),(n,m)\)出发,走的路径相同的方案数。设计\(dp[i][j][s][t]\)为第一个人在\((i,j)\)位置,第二个人在......