# string object (reference counted)

Path: /sdk/add_on/scriptstring/

This add-on registers a string type that is in most situations compatible with the `std::string`, except that it uses reference counting. This means that if you have an application function that takes a `std::string` by reference, you can register it with AngelScript to take a script string by reference. This works because the CScriptString wraps the `std::string` type, with the std::string type at the first byte of the CScriptString object.

Register the type with `RegisterScriptString(asIScriptEngine*)`. Register the utility functions with `RegisterScriptStringUtils(asIScriptEngine*)`.

See also:
  string object (STL)

## Public C++ interface

    class CScriptString
    {
    public:
      // Constructors
      CScriptString();
      CScriptString(const CScriptString &other);
      CScriptString(const char *s);
      CScriptString(const std::string &s);

      // Memory management
      void AddRef();
      void Release();

      // Assignment
      CScriptString &operator=(const CScriptString &other);

      // Concatenation
      CScriptString &operator+=(const CScriptString &other);
      friend CScriptString *operator+(const CScriptString &a, const CScriptString &b);

      // Memory buffer
      std::string buffer;
    };

## Public script interface

      class string
      {
        // Constructors
        string();
        string(const string &in other);

        // Returns the length of the string
        uint length() const;

        // The string class has several operators that are not expressable in the script syntax yet

        // Assignment and concatenation
        // string & operator =  (const string &in other)
        // string & operator += (const string &in other)
        // string @ operator +  (const string &in a, const string &in b)

        // Access individual characters
        // uint8 & operator [] (uint)
        // const uint8 & operator [] (uint) const

        // Comparison operators
        // bool operator == (const string &in a, const string &in b)
        // bool operator != (const string &in a, const string &in b)
        // bool operator <  (const string &in a, const string &in b)
        // bool operator <= (const string &in a, const string &in b)
        // bool operator >  (const string &in a, const string &in b)
        // bool operator >= (const string &in a, const string &in b)

        // Automatic conversion from number types to string type
        // string & operator =  (double val)
        // string & operator += (double val)
        // string @ operator +  (double val, const string &in str)
        // string @ operator +  (const string &in str, double val)
        // string & operator =  (float val)
        // string & operator += (float val)
        // string @ operator +  (float val, const string &in str)
        // string @ operator +  (const string &in str, float val)
        // string & operator =  (int val)
        // string & operator += (int val)
        // string @ operator +  (int val, const string &in str)
        // string @ operator +  (const string &in str, int val)
        // string & operator =  (uint val)
        // string & operator += (uint val)
        // string @ operator +  (uint val, const string &in str)
        // string @ operator +  (const string &in str, uint val)
      }

      // Get a substring of a string
      string @ substring(const string &in str, int start, int length);

      // Find the first occurrance of the substring
      int findFirst(const string &in str, const string &in sub);
      int findFirst(const string &in str, const string &in sub, int startAt)

      // Find the last occurrance of the substring
      int findLast(const string &in str, const string &in sub);
      int findLast(const string &in str, const string &in sub, int startAt);

      // Find the first character from the set
      int findFirstOf(const string &in str, const string &in set);
      int findFirstOf(const string &in str, const string &in set, int startAt);

      // Find the first character not in the set
      int findFirstNotOf(const string &in str, const string &in set);
      int findFirstNotOf(const string &in str, const string &in set, int startAt);

      // Find the last character from the set
      int findLastOf(const string &in str, const string &in set);
      int findLastOf(const string &in str, const string &in set, int startAt);

      // Find the last character not in the set
      int findLastNotOf(const string &in str, const string &in set);
      int findLastNotOf(const string &in str, const string &in set, int startAt);

      // Split the string into an array of substrings
      string@[]@ split(const string &in str, const string &in delimiter);

      // Join an array of strings into a larger string separated by a delimiter
      string@ join(const string@[] &in str, const string &in delimiter);