版权声明:QQ:763905926 未经允许请勿转载,转载请注明出处! https://blog.csdn.net/lms1008611/article/details/87451037
19年的第一个周末,把上周在公司划水摸鱼偷偷写的一个小程序搬到博客上来,这里搬的是:判断一个字符串是否为另一个字符串的前串。 比方有个char str[] = "hello my 2019! keep moving!",那么给一个子串,假如为 char str1[] = "hello",我们要实现的就是判断 str1是否为str的前串,给定char str2[] = "moving!",判断str2是否为str的后串
实现也比较简单,主要掌握好指针基本就没什么问题,当然也可以采用别的方式,这里我把这个功能模块放入一个命名空间中,使用时直接 命名空间::功能模块函数名 即可,下边就来看看这里是如何实现的
//LmsPublicLib.h头文件
#ifndef __LMSPUBLICLIB_H__
#define __LMSPUBLICLIB_H__
#include <stdio.h>
#include <unistd.h>
#include <string>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <assert.h>
#include <vector>
using namespace std;
#ifndef MAX_PATH
#define MAX_PATH 256
#endif
namespace LmsPublicLib
{
bool HeadStrJuge(const char* OriStr, const char *HeadStr);//判断HeadStr是否为OriStr的前串
bool TailStrJuge(const char* OriStr, const char *TailStr);//判断TailStr是否为OriStr的后串
};
#endif //__LMSPUBLICLIB_H__
//LmsPublicLib.cpp源文件
#include "LmsPublicLib.h"
namespace LmsPublicLib
{
/*
* HeadStr是OriStr的前串,返回true,否则返回false
*/
bool HeadStrJuge(const char* OriStr, const char *HeadStr)
{
if(!OriStr || !HeadStr || (strlen(HeadStr) > strlen(OriStr)) )
{
return false;
}
char OriStrArray[MAX_PATH] = {0};
char HeadStrArray[128] = {0};
strcpy(OriStrArray, OriStr);
strcpy(HeadStrArray, HeadStr);
OriStrArray[strlen(OriStrArray)] = '\0';
HeadStrArray[strlen(HeadStrArray)] = '\0';
int compareLen = 0;
for(int i=0; '\0' != HeadStrArray[i]; i++)
{
if(HeadStrArray[i] != OriStrArray[i])
{
break;
}
compareLen++;
}
return compareLen == strlen(HeadStrArray);
}
/*
* TailStr是OriStr的后串,返回true,否则返回false
*/
bool TailStrJuge(const char* OriStr, const char *TailStr)
{
if(!OriStr || !TailStr || (strlen(TailStr) > strlen(OriStr)) )
{
return false;
}
char OriStrArray[MAX_PATH] = {0};
char TailStrArray[128] = {0};
strcpy(OriStrArray, OriStr);
strcpy(TailStrArray, TailStr);
OriStrArray[strlen(OriStrArray)] = '\0';
TailStrArray[strlen(TailStrArray)] = '\0';
char *pcOri = OriStrArray + strlen(OriStrArray) -1;
char *pcTail = TailStrArray + strlen(TailStrArray) -1;
int compareLen = 0;
for(int i=strlen(TailStrArray)-1; i>=0; i--)
{
if(*(pcOri--) != *(pcTail--))
{
break;
}
compareLen++;
}
return compareLen == strlen(TailStrArray);
}
}
下边来验证一下
#include "LmsPublicLib.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
char pszPath[256] = "hello my 2019! keep moving!";
bool ret = LmsPublicLib::HeadStrJuge(pszPath, "hello");
cout << "HeadStrJuge ret = " << ret << endl;
ret = LmsPublicLib::TailStrJuge(pszPath, "moving!");
cout << "TailStrJuge ret = " << ret << endl;
return 0;
}
编译执行一下:
可以看到,结果符合我们的预期,当然,当输入的子串不是前串或后串时,输出的便是0,这里就不再演示了。