C风格字符串相关库函数: strlen(), strcpy(), strcat(), strstr(), strupr(), strlwr()

C风格字符串的特点:

1. 普通字符型数组
2. 以0为结束元素的字符型数组: C风格字符串
3. sizeof, strlen
4. 用 字符串常量 为 字符型数组 赋值
5. 用 字符串常量 为 字符型指针 赋值
6. 访问字符串中的元素: 取值 赋值
7. C风格字符串的输入输出
8. C风格字符串相关库函数: strlen():计算字符串长度 strcpy():复制字符串 strcat():拼接字符串 strstr():查找子字符串 strupr:()小写转大写 strlwr():大写转小写

一、使用列子如下

#include
#include

#pragma warning(disable:4996)

int main()
{
    char* pStr = "Hello C";
    char* pTemp = "Hello C, I am C++";

    //1、strlen(const char* _Str):计算字符串_Str的长度
    int iSize1 = strlen(pStr);
    int iSize2 = strlen(pTemp);
    printf("pStr iSize:%d   pTemp iSize:%d\n", iSize1, iSize2);

    //2、strcpy(char* _Dest, const char*, _Source)
    //   把字符串_Source复制给_Dest
    char pCopy[20] = {0};
    strcpy(pCopy, pStr);
    printf("pCopy str is %s:\n", pCopy);

    //3、strcat(char* _Dest, const char* _Source)
    //把字符串_Source拼接到字符串_Dest末尾
    char szCat[20] = "I am java,";
    strcat(szCat, pStr);
    printf("szCat str is %s:\n", szCat);

    //4、strstr(char* _Str, const char* _SubStr)
    //   判断字符串str2是否是str1的子串。如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
    char* subStr = strstr(pTemp, pStr);
    printf("subStr str is %s:\n", subStr);

    //5、strupr(char * _Str)
    //   把字符串_Str中的所有小写字符转成大写字符
    char szS[] = "I Love You";
    char* pUpr = strupr(szS);
    printf("pUpr str is %s:\n", pUpr);

    //6、strlwr(char * _Str)
    //   把字符串_Str中的所有大写字符转成小写字符
    char szS2[] = "We are good friend";
    char* pLwr = strlwr(szS2);
    printf("pLwr str is %s:\n", pLwr);

    return 0;
}

二、自己实现以上函数

#include
#include
#define dim(x) (sizeof(x) / sizeof(x[0]))

//strlen 字符串长度
size_t mystrlen(const char *str)
{
    size_t nLen = 0;
    while (*str++) nLen++;
    return nLen;
}

//strcpy
char *mystrcpy(char *strDst, const char *strSrc)
{
    if (strDst == NULL || strSrc == NULL) return NULL;
    if (strDst == strSrc) return strDst ;
    char *temp = strDst;
    while (*strDst++ = *strSrc++);
    return temp ;
}

//strcat
char *mystrcat(char *strDst, const char *strSrc)
{
    char *temp = strDst;
    while (*temp++);
    temp--;
    while (*temp++ = *strSrc++);
    return strDst;
}

//strstr
char *mystrstr(const char *s1, const char *s2)
{
    if (*s2 == NULL) return (char *)s1;

    while (*s1)
    {
        for (int i = 0; *(s1 + i) == *(s2 + i); i++)
        {
            if (*(s2 + i + 1) == '\0')
                return (char *)s1;
        }
        s1++;
    }
    return NULL;
}

//strcmp
int mystrcmp(const char *s1, const char *s2)
{
    while (*s1 && *s2 && *s1 == *s2)
    {
        s1++;
        s2++;
    }
    return (*s1 - *s2);
}

//strupr
char * mystrupr(char *str)
{
    char *p = (char *)str;
    while (*p)
    {
        if (*p >= 'a' && *p <= 'z') *p -= 32;
        p++;
    }
    return (char *)str;
}

//strlwr
char * mystrlwr(char *str)
{
    char *p = (char *)str;
    while (*p)
    {
        if (*p >= 'A' && *p <= 'Z') *p += 32;
        p++;
    }
    return (char *)str;
}

你可能感兴趣的:(C/C++)