The String Class

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/07/2012 at 10:41, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   12 
Platform:   Windows  ;   
Language(s) :     C++  ;

---------
Hi,

I'm going through the string class and writing out small working examples of each string function. So I don't have to figure them out while I'm in the middle of a project. And I'm not getting the expected results from ComparePart() & RelCompare();
They are producing strange values(36&100,000). When they should be producing zero(I think).

Here's what I've got.
I'm comparing two strings with the same values then running each of the string functions on them:

    String s1 = "Hello there";                    //The string we will work on  
  LONG len = s1.GetLength();                    //Get the length of the string  
  
  LONG Fpos = NULL;                             //This will hold the position of a string in the text  
  LONG Lpos = NULL;                             //This will hold the position of a string in the text  
  Bool firstfound = s1.FindFirst("ll",&Fpos,1); //Finds the first occurance of "ll" and stores it's position in the string in "Fpos"  
  Bool lastfound = s1.FindLast("e",&Lpos,-1);   //Finds the last occurance of "e" and stores it's position in the string in "Lpos"  
  GePrint("First Position in the string= " + LongToString(Fpos));  
  GePrint("Last Position in the string= " +LongToString(Lpos));  
  
  String sub = s1.SubStr(2,2);         //Gets "ll" characters in the word Hello  
  GePrint("SubString= " + sub);  
    
  String s2 = "Hello there";           //A second string we'll use to compare to the original string  
  LONG comp = s1.Compare(s2);          //Compares two strings and returns zero if the two strings are exactly the same (Case sensitive)  
                                       //If the second string is shorter than the original. It will return positive values  
                                       //If the second string is longer than the original. It will return negative values  
  GePrint("StringsEqual?: " + LongToString(comp));       
  
  LONG lexcomp = s1.LexCompare(s2);    //Compares two strings and returns zero if the two strings are exactly the same (NOT case sensitive)  
                                       //If the second string is shorter than the original. It will return positive values  
                                       //If the second string is longer than the original. It will return negative values  
  GePrint("StringsEqual?: " + LongToString(lexcomp));  
  
  LONG comppart = s1.ComparePart(s2, 2, 2);          //Returns 36!?<--------------Why not zero?  
  //LONG comppart = sub.Compare(scopy);              //Also Returns 36!?  
  GePrint("PartEqual?: " + LongToString(comppart));  
  
  LONG relcomp = s1.RelCompare(s2);                  //Returns 100,000!?<-------Why not zero?  
  GePrint("RelPartEqual?: " + LongToString(relcomp));

I'm wondering why I'm not getting zero for those two functions as expected?
And what those numbers(36 & 100,000) mean?

-ScottA

THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

On 15/07/2012 at 12:58, xxxxxxxx wrote:

I managed to solve the ComparePart() function.
I was thinking the last two params. were for the target string. But they are actually for the source string.

But I still can't figure out why RelCompare() does not return zero for two strings with the same value.

Here's the updated code:

  
  
  String s1 = "Hello there";                    //The string we will work on  
  LONG len = s1.GetLength();                    //Get the length of the string  
  
  LONG Fpos = NULL;                             //This will hold the position of a string in the text  
  LONG Lpos = NULL;                             //This will hold the position of a string in the text  
  Bool firstfound = s1.FindFirst("ll",&Fpos,1); //Finds the first occurance of "ll" and stores it's position in the string in "Fpos"  
  Bool lastfound = s1.FindLast("e",&Lpos,-1);   //Finds the last occurance of "e" and stores it's position in the string in "Lpos"  
  GePrint("First Position in the string= " + LongToString(Fpos));  
  GePrint("Last Position in the string= " +LongToString(Lpos));  
  
  String sub = s1.SubStr(2,2);         //Gets "ll" characters in the word Hello  
  GePrint("SubString= " + sub);  
    
  String s2 = "Hello there";           //A second string we'll use to compare to the original string  
  LONG comp = s1.Compare(s2);          //Compares two strings and returns zero if the two strings are exactly the same (Case sensitive)  
                                       //If the second string is shorter than the original. It will return positive values  
                                       //If the second string is longer than the original. It will return negative values  
  GePrint("StringsEqual?: " + LongToString(comp));       
  
  LONG lexcomp = s1.LexCompare(s2);    //Compares two strings and returns zero if the two strings are exactly the same (NOT case sensitive)  
                                       //If the second string is shorter than the original. It will return positive values  
                                       //If the second string is longer than the original. It will return negative values  
  GePrint("StringsEqual?: " + LongToString(lexcomp));  
  
  
  String s3 = "ll";  
  LONG subcomp = sub.Compare(s3);                    //Returns zero when the string referenced in the params(s3) exactly matches the sub string's value   
  GePrint("SubEqual?: " + LongToString(subcomp));  
  
  String s4 = "ll";                                  //s4 is the target...s1 is the source    
  LONG comppart = s1.ComparePart(s4, 2, 2);          //param1 is the target...param2 is the number of source chars to compare...param3 is the position in the source to start comparing     
  GePrint("PartEqual?: " + LongToString(comppart));  
  
  LONG relcomp = s1.RelCompare(s2);                  //Returns 100,000!?<-------Why not zero?  
  GePrint("RelPartEqual?: " + LongToString(relcomp));  
  
  
  char ch[] = {"tB"};                              //The target  
  String str = "BBt";                              //The source  
  LONG source = str.ComparePart(String(ch),1,2);   //Compares two strings and returns zero if the two strings are exactly the same. Postions start at zero like array index's  
                                                   //param1 is the target...param2 is the number of source chars to compare...param3 is the position in the source to start comparing    
  GePrint("chPartEqual?: " + LongToString(source));

-ScottA