c語言 常用字符串函數

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<assert.h>

int _strlen( const char* str );
int _strcmp( const char* first, const char* second );
char* _strcat( char* dst, const char* src );
int _strstr( const char* src, const char* substring );
int _atoi( const char* digitString );

int _strlen( const char* str )
{
        assert( str != NULL );
        int len = 0;
        while( *str++ != '\0')
        {
                ++len;
        }

        return len;
}

int _strcmp( const char* first, const char* second )
{
        int ret = 0;
        assert( first!= NULL && second != NULL );
        while ( !(ret = *(unsigned char*)first - *(unsigned char*)second) && *first && *second )
        {
                first++;
                second++;
        }
        if ( ret < 0 )
        {
                ret = -1;
        }
        else if ( ret > 0 )
        {
                ret = 1;
        }

        return ret;
}

char* _strcat( char* dst, const char* src )
{
        assert( dst != NULL && src != NULL );
        char* addr = dst;
        while ( *dst != '\0' )
        {
                dst++;
        }
        while( *src != '\0' )
        {
                *dst = *src;
                dst++;
                src++;
        }
        dst++;
        *dst = '\0';

        return addr;
}

int _strstr( const char* src, const char* substring )
{
        assert( src != NULL && substring != NULL );
        const char* pSrc = src;
        const char* pSubstring = substring;
        int len1 = strlen( src );
        int len2 = strlen( substring );
        int retPos = -1;
        int i , j;
        for ( i = 0; i < len1 - len2 + 1; i++ )
        {
                for ( j = 0; j < len2; j++ )
                {
                        if ( *(src + i + j) != *(substring + j) )
                        {
                                break;
                        }
                }
                if ( j == len2 )
                {
                        retPos = i;
                        return retPos;
                }
        }

        return retPos;
}

int _atoi( const char* digitString )
{
        assert( digitString != NULL );

        int retVal = 0;
        int sign = -1;
        const char* pString;
        if ( *digitString == '-' )
        {
                pString = digitString + 1;
        }
        else if ( *digitString == '+' )
        {
                sign = 1;
                pString = digitString + 1;
        }
        else
        {
                sign = 1;
                pString = digitString;
        }

        while ( *pString != '\0' && isdigit(*pString) )
        {
                retVal = retVal * 10 + *pString - '0';
                ++pString;
        }
        if ( sign == -1 )
        {
                retVal *= -1;
        }

        return retVal;
}



int main()
{
        const char* str = "kennie";
        int len = _strlen(str);
        printf("%s lengh: %d\n", str, len);

        const char* str2 = "kennie";
        const char* str3 = "kenniee";
        int cmpResult = _strcmp( str2, str3 );
        printf("%s %s compare result: %d\n", str2, str3, cmpResult);

        char buf[10] = {'i', ' ', 'l', 'o', 'v', 'e'};
        const char* str4 = " u!";
        char* catString = _strcat(buf, str4);
        printf("catString is: %s\n", catString);


        const char* str6 = "i love rena baby";
        const char* str7 = "rena";
        printf("text: %s, pattern: %s\n", str6, str7);
        int pos = _strstr( str6, str7 );
        if ( pos == -1 )
        {
                printf("substring not find");
        }
        else
        {
                printf("pattern \"%s\" first occurs in \"%s\" of  pos: %d\n", str7, str6, pos);
        }

        const char* str5 = "-2345";
        int val = _atoi(str5);
        printf("string: %s, number: %d\n ", str5, val);
        return 0;
}

// main output
kennie@cbib:~/cplusplus/cstringLib$ g++ -o cstringlib.out cstringlib.cpp
kennie@cbib:~/cplusplus/cstringLib$ ./cstringlib.out

kennie lengh: 6
kennie kenniee compare result: -1
catString is: i love u!
text: i love rena baby, pattern: rena
pattern "rena" first occurs in "i love rena baby" of  pos: 7
string: -2345, number: -2345


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章