strchr()函数的实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char * mystrchr(const char * pdest, char ch)
{
char *p = NULL;
if (pdest == NULL)
{
return NULL;
}
while (*pdest != '\0')
{
if (ch == *pdest)
{
p = pdest;
return p;
}
pdest++;
}
return p;
}
void main()
{
char ch = 'a';
char str[100] = "task";
//char *p = strchr(str, ch);
char *p = mystrchr(str, ch);
if (p == NULL)
printf("没有找到相应的字符。\n");
else
{
printf("找到字符 %c, %s\n", *p, p);
}
system("pause");
}
strcpy()、strcat()的实现,注意参数的 传递变化:
#include<stdio.h>
#include<stdlib.h>
/* 使用递归完成,这儿有个问题是每次递归时传值时 pdest 都有变化 */
void mystrcpy(char *pdest, char *psour)
{
if (*psour == '\0')
{
return;
}
else
{
*pdest = *psour;
//mystrcpy(pdest++, psour++); 注意这二个的写法,因为有优先级的问题,所以会导致程序出错。
mystrcpy(++pdest, ++psour);
}
}
/* 副本机制,改变一个变量需要,该变量的地址、改变一个指针需要一个二级指针 */
void newmystrcpynull(char **pdest, char *psour)
{
*pdest = malloc(100);
char *npdest = *pdest;
while ((*npdest++) = (*psour))
{
}
}
/* 使用递归完成 */
void mystrcat(char *pdest, char *psour)
{
if (*psour == '\0')
{
/*pdest++;
*pdest = '\0';*/
return;
}
else
{
//int length = sizeof(*pdest);
while (*pdest != '\0')
pdest++;
*pdest = *psour;
mystrcat(++pdest, ++psour);
}
}
char * mystrcat(char *dest, const char *psour)
{
char *pstart = dest;
while (*pstart != '\0')
{
pstart++;
}
//从尾部
while ((*pstart++) = (*psour))
{
}
}
void main()
{
//char str[100] = { 0 };
/* 如果换成下面的指针方式 看 void newmystrcatnull(char **pdest, char *psour) 的参数传递 */
char *str = NULL;
char str1[20] = "task";
char str2[10] = "list";
//strcpy(str1, str2);
//strcat(str1, str2);
//mystrcpy(str1, str2);
//printf("%s\n", str1);
newmystrcpynull(str, str2);
printf("%s\n", str);
//system(str1);
system("pause");
}