Tuesday, July 18, 2006

string functions in C (1)

Mine:

int mystrcmp(const char* str1, const char * str2)
{
int m=0;
int n=0;
while(*str1++)
m++;
while(*str2++)
n++;
if (m==n) return 0;
else
return (m>n? 1:-1);
}

VC:
int mystrcmp2(const char* dst, const char * src)
{
int ret = 0 ;
while( ! (ret = *(unsigned char *)src - *(unsigned char *)dst) && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
}


strcat,

Mine:
char * mystrcat (char * dst, const char * src)
{
char *output=dst;
output += strlen(dst);
while(*src)
*output++ = *src++;
return dst;
}

VC:

char * mystrcat2 (char * dst, const char * src)
{

char * cp = dst;
while( *cp )
cp++; /* find end of dst */
while( *cp++ = *src++ ) ;/* Copy src to end of dst */
return( dst );
}


strcpy

Mine:

char * mystrcpy(char * dst, const char * src)
{
char *cp=dst;
while(*cp++ = *src++);
return dst;
}

VC: same. -- I don't think so, look at the following codes (12/08/07)

char *strcpy(char *strDest, const char *src);
{
assert((dst!=NULL) && (src !=NULL));
char *address = dst;
while( (*dst++ = * src++) != ‘\0’ )
NULL ;
return address;
}

why return char*? It can used in linked list.

strchr: returns pointer to the first occurence of c in string

char * mystrchr (const char * string, int ch)
{
while(*string)
{
if((*string++ - '0') == (char)ch)
return ((char*)string-1);
}
return NULL;
}


VC:

while (*string && *string != (char)ch)
string++;
if (*string == (char)ch)
return((char *)string);
return(NULL);

reverse string:

Mine: used strlen and for loop, not good

VC:

char * mystrrev (char * string)
{
char *start = string;
char *left = string;
char ch;
while (*string++) /* find end of string */
;
string -= 2;
while (left < string)
{
ch = *left;
*left++ = *string;
*string-- = ch;
}
return(start);
}

another reverse string using strlen:

int Reverse(char* str)
{
if (NULL==str)return -1; //no string
int l=strlen(str)-1; //get the string length

if (1==l)return 1;
for(int x=0;x < l;x++,l--)
{
str[x]^=str[l]; //triple XOR Trick
str[l]^=str[x]; //for not using a temp
str[x]^=str[l];
}
return 0;
}

another reverse a string:

void ReverseString (char *String)
{
char *Begin = String;
char *End = String + strlen(String) - 1;
char TempChar = '\0';

while (Begin < End)
{
TempChar = *Begin;
*Begin = *End;
*End = TempChar;
Begin++;
End--;
}
}

fill string with val:
char * mystrset2 (char * string, int val)
{
char *start = string;
while (*string)
*string++ = (char)val+'0';
return(start);
}

No comments:

Post a Comment