octave: Character Strings in Oct-Files

 
 A.1.3 Character Strings in Oct-Files
 ------------------------------------
 
 A character string in Octave is just a special ‘Array’ class.  Consider
 the example:
 
      #include <octave/oct.h>
      
      DEFUN_DLD (stringdemo, args, , "String Demo")
      {
        if (args.length () != 1)
          print_usage ();
      
        octave_value_list retval;
      
        charMatrix ch = args(0).char_matrix_value ();
      
        retval(1) = octave_value (ch, '\'');  // Single Quote String
      
        octave_idx_type nr = ch.rows ();
      
        for (octave_idx_type i = 0; i < nr / 2; i++)
          {
            std::string tmp = ch.row_as_string (i);
      
            ch.insert (ch.row_as_string (nr-i-1).c_str (), i, 0);
            ch.insert (tmp.c_str (), nr-i-1, 0);
          }
      
        retval(0) = octave_value (ch, '"');  // Double Quote String
      
        return retval;
      }
 
    An example of the use of this function is
 
      s0 = ["First String"; "Second String"];
      [s1,s2] = stringdemo (s0)
      ⇒ s1 = Second String
              First String
 
      ⇒ s2 = First String
              Second String
 
      typeinfo (s2)
      ⇒ sq_string
      typeinfo (s1)
      ⇒ string
 
    One additional complication of strings in Octave is the difference
 between single quoted and double quoted strings.  To find out if an
 ‘octave_value’ contains a single or double quoted string use one of the
 predicate tests shown below.
 
      if (args(0).is_sq_string ())
        octave_stdout << "First argument is a single quoted string\n";
      else if (args(0).is_dq_string ())
        octave_stdout << "First argument is a double quoted string\n";
 
    Note, however, that both types of strings are represented by the
 ‘charNDArray’ type, and so when assigning to an ‘octave_value’, the type
 of string should be specified.  For example:
 
      octave_value_list retval;
      charNDArray ch;
      ...
      // Create single quoted string
      retval(1) = octave_value (ch);   // default constructor is sq_string
                 OR
      retval(1) = octave_value (ch, '\'');  // explicitly create sq_string
 
      // Create a double quoted string
      retval(0) = octave_value (ch, '"');