Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Strcmp() function realization on C

Tags:

c

I need to make an strcmp function by myself, using operations with pointers. That's what I got:

int mystrcmp(const char *str1, const char *str2) {
    while ('\0' != *str1 && *str1 == *str2) {
        str1 += 1;
        str2++;
    }
    int result1 = (uint8_t)(*str2) - (uint8_t)(*str1); // I need (uint8_t) to use it with Russian symbols.
    return result1;
}

But my tutor told me that there are small mistake in my code. I spend really lot of time making tests, but couldn't find it.

like image 217
Parket Avatar asked Dec 08 '16 19:12

Parket


People also ask

How does strcmp () work in C?

strcmp compares two character strings ( str1 and str2 ) using the standard EBCDIC collating sequence. The return value has the same relationship to 0 as str1 has to str2 . If two strings are equal up to the point at which one terminates (that is, contains a null character), the longer string is considered greater.

What is the output of strcmp in C?

The strcmp() compares two strings character by character. If the strings are equal, the function returns 0.

How do I create my own strcmp?

To create our own strcmp function that ignores cases while comparing the strings. We will iterate through all characters of both the strings, if characters at ith index are the same i.e. string1[i] == string2[i], continue. If string1[i] > string2[i], return 1. If string1[i] < string2[i], return -1.

How many arguments that the strcmp () function can take?

The strcmp function takes two input arguments (two strings) and returns either true or false, just like any boolean expression. Strcmp will only return true if every character of both strings is the same and they are the same length. In all other cases, strcmp will return false.


1 Answers

Does this answer the question of what you're doing wrong?

#include <stdio.h>
#include <stdint.h> 
#include <string.h>

int mystrcmp(const char *str1, const char *str2);

int main(void)
{
    char* javascript = "JavaScript";
    char* java = "Java";

    printf("%d\n", mystrcmp(javascript, java));
    printf("%d\n", strcmp(javascript, java));
    return 0;
}

int mystrcmp(const char *str1, const char *str2) {
    while ('\0' != *str1 && *str1 == *str2) {
        str1 += 1;
        str2++;
    }
    int result1 = (uint8_t)(*str2) - (uint8_t)(*str1); // I need (uint8_t) to use it with Russian symbols.
    return result1;
}

Output:

-83
 83

I'll propose a quick fix:

Change

int result1 = (uint8_t)(*str2) - (uint8_t)(*str1);

To

int result1 =  (uint8_t)(*str1) - (uint8_t)(*str2);

And why you were wrong:

The return values of strcmp() should be:

if Return value < 0 then it indicates str1 is less than str2.

if Return value > 0 then it indicates str2 is less than str1.

if Return value = 0 then it indicates str1 is equal to str2.

And you were doing exactly the opposite.

like image 154
yLaguardia Avatar answered Oct 24 '22 15:10

yLaguardia