|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SYNOPSIS | DESCRIPTION | REFERENCE | BASE char* AND VString FUNCTIONS NOTES | VSTRLIB EXTRA | FEEDBACK | DOWNLOADS | AUTHOR | LICENSE
VSTRING is C/C++ string manipulation and handling library.
#include "vstring.h" #include "vstrlib.h" VString str = "Hello"; str += " World"; // str is `Hello World' now str_reverse( str ); // str is `dlroW olleH' now str_low( str ); // lower case VArray va = str_split( " +", str ); // array has `dlrow', `olleh' // " +" is Regexp str_reverse( va[0] ); str_reverse( va[1] ); str = str_join( va, " " ); // str is back to "Hello World" VTrie tr = va; // tr[ "Hello" ] contains "World"
VSTRING provides dynamic strings and char* compatibility and also Perl-like arrays, hashes and regexp objects. The dynamic string object can be freely exchanged with standard char* type, so there is no need to change function calls nor the implementation when you change from char* to String (and vice versa). The main difference from other similar libs is that the dynamic string class has no visible methods (except operators) so you will use it as a plain char* but it will expand/shrink as needed. All classes (VString, VArray, Vtrie) implementation provide shallow copy and copy-on-write functionality so assignment operators like:
str1 = str2 varr1 = varr2 vtrie1 = vtri2are cheap and fast!
vstring.h and vstrlib.h files can be used as reference. This file contains brief introduction and some notes but for further API documentation check the .h files.
All functions for char* handling may overflow! If you need safe strings, use the same functions but with VString instead of char*. Few functions common for char* and VString:
str_set( str, "hello" ); str_mul( str, 4 ); str_replace( str, "o", " " ); str_left( dest_str, str, 4 ); str_up( dest_str );In the examples above, str, dest_str and source_str may be either char* or VString.
VSTRING (VSTRLIB) also provides Perl-like arrays and hashes (VArray and VTrie). There is and VRegexp class which automates regexp pattern matching.
VString str = "hello"; str += " world"; if( str == "hello world") { ... } int len = str_len( str ); str[3] = 'z'; // safe! even outside string boundaries
VArray va; // append array elements va.push( "element 1" ); va.push( str ); // i.e. VString va.push( other_varray ); va.push( trie ); // see VTrie below // take out the last element VString str = va.pop() // push elements at the beginning va.unshift( "element 1" ); va.unshift( str ); // i.e. VString va.unshift( other_varray ); va.unshift( trie ); // see VTrie below // take out the first element VString str = va.shift(); va.reverse(); // reverse elements order va.undef(); // remove all elements
VTrie tr; tr[ "hello" ] = "world"; tr[ "number" ] = "12345"; VArray va = tr; // array is: hello world number 12345 // however only key+value order is preserved! tr.reverse(); // reverse keys <-> values tr.undef(); // remove all keys
VRegexp re( "a([0-9]+)" ); // compiling new regexp if( re.m( "tralala85." ) ) // match against compiled regexp res1 = re[1]; // re[1] returns `85' if( re.m( "tralala85.", "(la)+" ) ) // match against new regexp pattern { str_all_matched = re[0]; // `lala' str_first_capture = re[1]; // `la' } re.comp( "^[a-z]+[0-9]*" ); // reuse/recompile new regexp in the same obj re.study(); // takes extra time to speed multiple matchings with m()
If you find bug or have comment on library API, code or documentation text, please, contact me.
1996-2022 (c) Vladi Belperchinov-Shabanski "Cade" <[email protected]> <[email protected]> <[email protected]> http://cade.noxrun.com/projects/vstring/ https://github.com/cade-vs/vstring
Distributed under the GPLv2 license, see COPYING file for the full text. Splash image is "String Theory" by Casperium https://www.deviantart.com/casperium/art/String-Theory-14067289 Used with permission. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|