-3

i need to compare 2 string by the word after the last space character. example:

str1 = "tran tuan hien"
str2 = "doan tuan"

i need a function that return -1 when i call function( str1, str2); ( just like strcmp("hien", "tuan") return -1). Does c or c++ have any function like that?

shauryachats
  • 9,975
  • 4
  • 35
  • 48
thanh
  • 55
  • 6

1 Answers1

1

Here is a demonstrative program that shows how the function can be written in C

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

int cmp_last_word( const char s1[], const char s2[] )
{
    const char *p1 = s1 + strlen( s1 );

    while ( p1 != s1 && isblank( *( p1 - 1 ) ) ) --p1;

    const char *q1 = p1;

    while ( q1 != s1 && !isblank( *( q1 -1 ) ) ) --q1;

    const char *p2 = s2 + strlen( s2 );

    while ( p2 != s2 && isblank( *( p2 - 1 ) ) ) --p2;

    const char *q2 = p2;

    while ( q2 != s2 && !isblank( *( q2 -1 ) ) ) --q2;

    while ( q1 != p1 && q2 != p2 && *q1 == *q2 ) ++q1, ++q2;

    if ( q1 == p1 && q2 == p2 ) return 0;
    else if ( q1 == p1 && q2 != p2 ) return -1;
    else if ( q1 != p1 && q2 == p2 ) return 1;
    else return ( *q1 < *q2 ) ? -1 : 1;
}

int main(void) 
{
    char str1[] = "tran tuan hien   ";
    char str2[] = "doan tuan \t";

    printf( "%d\n", cmp_last_word( str1, str2 ) );

    strcpy( str2, "doan hien \t" );
    printf( "%d\n", cmp_last_word( str1, str2 ) );

    return 0;
}

The program output is

-1
0
Vlad from Moscow
  • 301,070
  • 26
  • 186
  • 335