#define _CRT_SECURE_NO_WARNINGS
#include <stdlib.h>
#include<stdio.h>
#include <string.h>
/************************************************************************/
/* 函数:功能 统计str中sub出现的次数 */
/* 参数:count 统计的次数 */
/* 返回值 0代表成功 -1代表出错 */
/************************************************************************/
int getSubCount(const char *str,const char*sub,int *count)
{
int ret = 0;
const char *p1 = str;
const char *p2 = sub;
int muyycount =0;
if (str==NULL||sub==NULL||count==NULL)
{
ret = -1;
return ret;
}
do
{
p1 = strstr(p1,sub);//若找到 返回sub首次出现在p1的位置
if (p1!=NULL)
{
muyycount++;
p1 = p1 + strlen(p2);
}
else
{
break;
}
} while (*p1!='\0');
*count = muyycount;
return ret;
}
/************************************************************************/
/* 功能:逆序 把字符串str逆序存放到buf中
参数:*/
/************************************************************************/
void inverseStr(const char *str,char *buf)
{
const char *p = str;
if (str ==NULL||buf==NULL)
{
return ;
}
if (*p=='\0')
{
return;
}
inverseStr(p+1,buf);
strncat(buf,p,1);
}
/************************************************************************/
/* 功能:将字符串str出现的字串src替换为字符串dst并存放到out中 */
/************************************************************************/
void strrpl(const char *str, char *out, const char *src, const char *dst)
{
char *p = str;
int i =0;
unsigned int len_s = strlen(src);
unsigned int len_d = strlen(dst);
// 这几段检查参数合法性
if((NULL == src) || (NULL == dst) || (NULL == str) || (NULL == out))
{
return ;
}
if((strcmp(str, "") == 0) || (strcmp(src, "") == 0))
{
return ;
}
while((*p != '\0'))
{
if(strncmp(p,src,len_s) != 0)
{
out[i] = *p; //一个字符一个字符的写入out中
p++;
i++;
}
else
{
int len_o = strlen(out);
strcat_s(out,len_o+len_d+1,dst); //追加 第二个参数的意义 代表out整个缓冲区的长度
p = p + len_s;
i = i + len_d;
}
}
}
int main()
{
char *p = "ssabcdddfreeabcdefgqd1234abcdeabcdsfd";
char *sub = "abcd";
int num;
int ret = 0;
char buf[20]={0};
char out[50]={0};
char *dst = "hello";
ret = getSubCount(p,sub,&num);
if (ret!=0)
{
printf("error\n");
return -1;
}
printf("num:%d\n",num);
inverseStr(sub,buf);
printf("buf:%s",buf);
strrpl(p, out,sub, dst);
printf("out:%s\n",out);
system("pause");
return 0;
}