(1)统计字符串中出现的子字符串数量
#include "stdafx.h"
void findcount(char* s1,char *s2);
void findcount(char* s1,char *s2)
{
char * str1 = s1;
char * str2 = s2;
int count=0;
while (*str1!='\0')
{
if (*str1==*str2&&*str1!='\0'&&*str2!='\0')
{
str1++;
str2++;
}
else
{
str2= s2;
str1++;
}
if (*str2=='\0')
{
count++;
str2= s2;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char *str1 = "abdbcfbcrbcdgrbcddbcdfsabcdcc";
char *str2 ="bcd";
findcount(str1,str2);
return 0;
}
(2)实现strcpy函数
char * strcpy(char *strDest,const char *strSrc)
{
assert((strDest!=NULL) && (strSrc !=NULL));
char * strDestCopy=strDest;
//while ((*strDest++=*strSrc++)!='\0');//可以替换成下面的循环
while(*strSrc!='\0')
{
*strDest=*strSrc;
strDest++;
strSrc++;
}
*strDest=*strSrc;
return strDestCopy;
}
int _tmain(int argc, _TCHAR* argv[])
{
char a[20]="you are a student",c[]="i am teacher!";
strcpy(a,c);
return 0;
}
(3):Strcat原型
char *strcat(char *strDest, const char *strScr) //将源字符串加const,表明其为输入参数
{
char * address = strDest; //该语句若放在assert之后,编译出错
assert((strDest != NULL) && (strScr != NULL)); //对源地址和目的地址加非0断言
while(*strDest!='\0') //是while(*strDest!=’\0’)的简化形式
{ //若使用while(*strDest++),则会出错,因为++是不受循环
strDest++; //约束的。所以要在循环体内++;因为要是*strDest最后指
} //向该字符串的结束标志’\0’。
while((*strDest++ = *strScr++)!='\0') //是while((*strDest++ = *strScr++)!=’\0’)的简化形式
{
NULL; //该循环条件内可以用++,
} //此处可以加语句*strDest=’\0’;
return address; //为了实现链式操作,将目的地址返回
}
int _tmain(int argc, _TCHAR* argv[])
{
char a[40]="you are a student",c[]="i am teacher!";
strcat(a,c);
return 0;
}
(4)memcpy
//注意类型都是void*
void *memcpy(void *dest, const void *src, size_t count)
{
char *tmp = dest;
const char *s = src;
while (count--)
*tmp++ = *s++;
return dest;
}