#include <stdio.h>
#define SIZE 100
int myStringCompareArray( const char string1[ ] ,
const char string2[ ] )
{
int i = 0 ;
while ( string1[ i] != '\0 ' &&
string2[ i] != '\0 ' )
{
if ( string1[ i] < string2[ i] )
{
return - 1 ;
}
if ( string1[ i] > string2[ i] )
{
return 1 ;
}
++ i;
}
if ( string1[ i] == '\0 ' &&
string2[ i] == '\0 ' )
{
return 0 ;
}
if ( string1[ i] == '\0 ' )
{
return - 1 ;
}
return 1 ;
}
int myStringComparePointer( const char * string1,
const char * string2)
{
while ( * string1 != '\0 ' &&
* string2 != '\0 ' )
{
if ( * string1 < * string2)
{
return - 1 ;
}
if ( * string1 > * string2)
{
return 1 ;
}
++ string1;
++ string2;
}
if ( * string1 == '\0 ' &&
* string2 == '\0 ' )
{
return 0 ;
}
if ( * string1 == '\0 ' )
{
return - 1 ;
}
return 1 ;
}
int myStringNCompareArray( const char string1[ ] ,
const char string2[ ] ,
int number)
{
for ( int i = 0 ; i < number; ++ i)
{
if ( string1[ i] == '\0 ' ||
string2[ i] == '\0 ' )
{
if ( string1[ i] == string2[ i] )
{
return 0 ;
}
if ( string1[ i] == '\0 ' )
{
return - 1 ;
}
return 1 ;
}
if ( string1[ i] < string2[ i] )
{
return - 1 ;
}
if ( string1[ i] > string2[ i] )
{
return 1 ;
}
}
return 0 ;
}
int myStringNComparePointer( const char * string1,
const char * string2,
int number)
{
for ( int i = 0 ; i < number; ++ i)
{
if ( * string1 == '\0 ' ||
* string2 == '\0 ' )
{
if ( * string1 == * string2)
{
return 0 ;
}
if ( * string1 == '\0 ' )
{
return - 1 ;
}
return 1 ;
}
if ( * string1 < * string2)
{
return - 1 ;
}
if ( * string1 > * string2)
{
return 1 ;
}
++ string1;
++ string2;
}
return 0 ;
}
int main( void )
{
char string1[ SIZE] ;
char string2[ SIZE] ;
int number;
printf ( "Enter the first string: " ) ; fgets ( string1
, SIZE
, stdin
) ;
printf ( "Enter the second string: " ) ; fgets ( string2
, SIZE
, stdin
) ;
printf ( "Enter number of characters to compare: " ) ;
printf ( "\n Using array notation:\n " ) ;
printf ( "strcmp result = %d\n " , myStringCompareArray( string1, string2) ) ;
printf ( "strncmp result = %d\n " , myStringNCompareArray( string1,
string2,
number) ) ;
printf ( "\n Using pointer notation:\n " ) ;
printf ( "strcmp result = %d\n " , myStringComparePointer( string1, string2) ) ;
printf ( "strncmp result = %d\n " , myStringNComparePointer( string1,
string2,
number) ) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFNJWkUgMTAwCgppbnQgbXlTdHJpbmdDb21wYXJlQXJyYXkoY29uc3QgY2hhciBzdHJpbmcxW10sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHN0cmluZzJbXSkKewogICAgaW50IGkgPSAwOwoKICAgIHdoaWxlIChzdHJpbmcxW2ldICE9ICdcMCcgJiYKICAgICAgICAgICBzdHJpbmcyW2ldICE9ICdcMCcpCiAgICB7CiAgICAgICAgaWYgKHN0cmluZzFbaV0gPCBzdHJpbmcyW2ldKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmluZzFbaV0gPiBzdHJpbmcyW2ldKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICArK2k7CiAgICB9CgogICAgaWYgKHN0cmluZzFbaV0gPT0gJ1wwJyAmJgogICAgICAgIHN0cmluZzJbaV0gPT0gJ1wwJykKICAgIHsKICAgICAgICByZXR1cm4gMDsKICAgIH0KCiAgICBpZiAoc3RyaW5nMVtpXSA9PSAnXDAnKQogICAgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKaW50IG15U3RyaW5nQ29tcGFyZVBvaW50ZXIoY29uc3QgY2hhciAqc3RyaW5nMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMikKewogICAgd2hpbGUgKCpzdHJpbmcxICE9ICdcMCcgJiYKICAgICAgICAgICAqc3RyaW5nMiAhPSAnXDAnKQogICAgewogICAgICAgIGlmICgqc3RyaW5nMSA8ICpzdHJpbmcyKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgIH0KCiAgICAgICAgaWYgKCpzdHJpbmcxID4gKnN0cmluZzIpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CgogICAgICAgICsrc3RyaW5nMTsKICAgICAgICArK3N0cmluZzI7CiAgICB9CgogICAgaWYgKCpzdHJpbmcxID09ICdcMCcgJiYKICAgICAgICAqc3RyaW5nMiA9PSAnXDAnKQogICAgewogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIGlmICgqc3RyaW5nMSA9PSAnXDAnKQogICAgewogICAgICAgIHJldHVybiAtMTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKaW50IG15U3RyaW5nTkNvbXBhcmVBcnJheShjb25zdCBjaGFyIHN0cmluZzFbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHN0cmluZzJbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbnVtYmVyKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bWJlcjsgKytpKQogICAgewogICAgICAgIGlmIChzdHJpbmcxW2ldID09ICdcMCcgfHwKICAgICAgICAgICAgc3RyaW5nMltpXSA9PSAnXDAnKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHN0cmluZzFbaV0gPT0gc3RyaW5nMltpXSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChzdHJpbmcxW2ldID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RyaW5nMVtpXSA8IHN0cmluZzJbaV0pCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RyaW5nMVtpXSA+IHN0cmluZzJbaV0pCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCmludCBteVN0cmluZ05Db21wYXJlUG9pbnRlcihjb25zdCBjaGFyICpzdHJpbmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXIpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtYmVyOyArK2kpCiAgICB7CiAgICAgICAgaWYgKCpzdHJpbmcxID09ICdcMCcgfHwKICAgICAgICAgICAgKnN0cmluZzIgPT0gJ1wwJykKICAgICAgICB7CiAgICAgICAgICAgIGlmICgqc3RyaW5nMSA9PSAqc3RyaW5nMikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgqc3RyaW5nMSA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgaWYgKCpzdHJpbmcxIDwgKnN0cmluZzIpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAgICAgICBpZiAoKnN0cmluZzEgPiAqc3RyaW5nMikKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIH0KCiAgICAgICAgKytzdHJpbmcxOwogICAgICAgICsrc3RyaW5nMjsKICAgIH0KCiAgICByZXR1cm4gMDsKfQoKaW50IG1haW4odm9pZCkKewogICAgY2hhciBzdHJpbmcxW1NJWkVdOwogICAgY2hhciBzdHJpbmcyW1NJWkVdOwogICAgaW50IG51bWJlcjsKCiAgICBwcmludGYoIkVudGVyIHRoZSBmaXJzdCBzdHJpbmc6ICIpOwogICAgZmdldHMoc3RyaW5nMSwgU0laRSwgc3RkaW4pOwoKICAgIHByaW50ZigiRW50ZXIgdGhlIHNlY29uZCBzdHJpbmc6ICIpOwogICAgZmdldHMoc3RyaW5nMiwgU0laRSwgc3RkaW4pOwoKICAgIHByaW50ZigiRW50ZXIgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gY29tcGFyZTogIik7CiAgICBzY2FuZigiJWQiLCAmbnVtYmVyKTsKCiAgICBwcmludGYoIlxuVXNpbmcgYXJyYXkgbm90YXRpb246XG4iKTsKCiAgICBwcmludGYoInN0cmNtcCByZXN1bHQgPSAlZFxuIiwKICAgICAgICAgICBteVN0cmluZ0NvbXBhcmVBcnJheShzdHJpbmcxLCBzdHJpbmcyKSk7CgogICAgcHJpbnRmKCJzdHJuY21wIHJlc3VsdCA9ICVkXG4iLAogICAgICAgICAgIG15U3RyaW5nTkNvbXBhcmVBcnJheShzdHJpbmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcikpOwoKICAgIHByaW50ZigiXG5Vc2luZyBwb2ludGVyIG5vdGF0aW9uOlxuIik7CgogICAgcHJpbnRmKCJzdHJjbXAgcmVzdWx0ID0gJWRcbiIsCiAgICAgICAgICAgbXlTdHJpbmdDb21wYXJlUG9pbnRlcihzdHJpbmcxLCBzdHJpbmcyKSk7CgogICAgcHJpbnRmKCJzdHJuY21wIHJlc3VsdCA9ICVkXG4iLAogICAgICAgICAgIG15U3RyaW5nTkNvbXBhcmVQb2ludGVyKHN0cmluZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIpKTsKCiAgICByZXR1cm4gMDsKfQ==