首先是两个基础函数 gets和puts
这里,没有做越界检查,也没有做最大值限制,比较不安全。
char* mgets(char * pc)
{
char *p = pc;
do
{
*p++ = getchar();
} while (*(p-1) != '\n');
*(p-1) = '\0';
return pc;
}
void mputs(char* pc)
{
while (*pc != '\0')
putchar(*pc++);
}
检测字符串长度函数strlen
int mstrlen(char* p)
{
int sum = 0;
while (*p)
{
sum++; p++;
}
return sum; //返回值是int型
}
字符串连接函数
strcat() 函数把 strSource 所指向的字符串追加到 strDestination 所指向的字符串的结尾,所以必须要保证 strDestination 有足够的内存空间来容纳两个字符串,否则会导致溢出错误。
注意:strDestination 末尾的\0会被覆盖,strSource 末尾的\0会一起被复制过去,最终的字符串只有一个\0。
在这里再次没有做越界检查
char* mstrcat(char* a, char* b)
{
char* p = a;
while (*p++); //找到a的最后一个字符
p--;
while (*b) //把b链接上去
*p++ = *b++;
*p = '\0';
return a; //只传两个参数,检查不太好做。
//但是可以重新开辟空间,以防越界
}
字符串复制函数strcpy
后者覆盖前者。
char* mcopy(char* p1, char* p2)
{
int i=0;
char* pc = p1;
while (*pc++ != '\0');
pc--;
do
{
*pc++ = *p2++;
} while (*p2 != '\0');
return p1;
}//这个做的不是很好,。。难以言喻
字符串比较函数
一位一位比asscii码,而不是比总和
int mcmp(char* p1, char* p2)
{
while (*p1 != '\0' && *p2 != '\0')
{
if (*p1 > * p2)
return 1;
else if (*p1 < *p2)
return -1;
else
{
*p1++;
*p2++;
}
}
return 0;
}//返回数字
字符串查找函数strstr
char* mstrstr(char* p1, char* p2)
{
char *pc=0,*p=p2;
int flag = 1;
while (*p1 != '\0')
{
flag = 1;
p = p2;
if (*p1++==*p++)
{
pc = p1-1;
while (*p != '\0')
{
if (*p1!= *p)
{
flag = 0;
break;
}
else
{
*p1++;
*p++;
}
}
if(flag)
return pc;
}
}
return pc = 0;
}
找子串
a中从第m个开始的n个字符,放入b中。
char* mstrsub(char* a, int m, int n, char* b)
{
int i = 0;
char* p = a, * pi = b;
if (mstrlen(a) > (m + n))
{
p += m;
for (i = 0; i < n; i++)
{
if (mstrlen(b) > n)
*pi++ = *(p + i);
else
{
b = 0;
break;
}
}
*pi = '\0';
}
else b = 0;
return b;
}