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.
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 (1==l)return 1;
{
if (NULL==str)return -1; //no string
int l=strlen(str)-1; //get the string length
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)
while (Begin < End)
{
char *Begin = String;
char *End = String + strlen(String) - 1;
char TempChar = '\0';
{
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