C语言字符串(不使用标准函数)函数的实现,strstr,strcmp,strlen,gets,puts,strcpy,strcat

首先是两个基础函数 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;
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值