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


Log in to reply