面试之字符串常见操作函数归纳

常见面试字符串操作函数编写总结,测试全部能用,但并不保证完全和原型一样严谨。

**#include "stdio.h"
//功能: 查找字符串s中首次出现c字符的位置
//说明: 返回首次出现c的位置的指针,返回的地址是被查找的字符串指针开始的第一个与c相同字符的指针,若s中不存在c则返回NULL
char *my_strchr(const char *s, int c)
{
    if(s == NULL)
    {
        return NULL;
    }
    while(*s != '\0')
    {
        if(*s == (char)c )
        {
            return (char *)s;
        }
        s++;
    }
    return NULL;
}
//功能是从源src所指的内存地址的起始位置开始拷贝count个字节到目标dest所指的内存地址的起始位置中。
//size_t 当unsigned int用就ok
void *Mymemcpy(void *dest, const void *src, unsigned int count  
{  
    char *p1=(char *)dest;
    char *p2=(char *)src;
    if (NULL == dest || NULL == src || count <= 0)  
        return NULL;  
    while (count--)  
        *p1++ = *p2++;  
    return dest;  
}  
//strcat把src所指向的字符添加到dest结尾处
//(覆盖原dest结尾处的'\0'),并添加新的'\0'。
char *Mystrcat(char *dest,const char *str)  
{   
    char *p=dest;  

    while(*p!='\0') ++p;  

    while((*p++=*str++)!='\0')  
    {  
        //  
    }  

    return dest;  
}  
/*
// C标准库中也有个memset函数,但是我们这里用的是自己写的,没用标准库
函数功能:将p中当前位置后面的length个字节用 val 替换 。
用来对一段内存空间全部设置为某个字符
一般用在对定义的字符串进行初始化为‘ ’或‘/0’;
函数参数:
①p为要操作的内存的指针。
②val为要设置的值。你既可以向 val传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换。
③length为p的前 length 个字节,sizeof(p指向的数组)
*/
void memset(char *p, int val, int length)
{
    int i;

    for (i=0; i<length; i++)
    {
        p[i] = val;
    }
}
/*
函数功能:它对两个字符串进行比较,然后返回比较结果
返回结果如下规定:
①cs小于ct,返回负值或者-1;                 
②cs大于ct,返回正值或者1;
③cs等于ct,返回0;
*/
int strcmp(const char *cs, const char *ct)
{
    unsigned char c1, c2;
    while (1) {
        c1 = *cs++;
        c2 = *ct++;
        if (c1 != c2)
            return c1 < c2 ? -1 : 1;
        if (!c1)
            break;
    }
    return 0;
}
/*
函数功能:strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dst开始的地址空间
①const修饰:源字符串参数用const修饰,防止修改源字符串;
*/
void strcpy(char *dst, const char *src)
{
    while (*src != '\0')
    {
        *dst++ = *src++;
    }
}
//将用户输入的字符串命令str按照空格分割成多个字符串,依次放入cmd这个二维数组
void cmdsplit(char cmd[][MAX_LEN_PART],const char *str)
{
    int m = 0, n = 0;   // m表示二位数组第一维,n表示第二维
    while (*str != '\0')
    {
        if (*str != ' ')
        {
            cmd[m][n] = *str;
            n++;
        }
        else
        {
            cmd[m][n] = '\0';
            n = 0;
            m++;
        }
        str++;
    }
    cmd[m][n] = '\0';
}**
















猜你喜欢

转载自blog.csdn.net/wangweijundeqq/article/details/79087112