您的位置:首页 > 编程语言 > C语言/C++

c语言 常用字符串函数

2012-04-24 10:17 253 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  语言 c dst null string