You can download all programs as a single tar.gz file from Download String . To get this file, in the web-browser, save this file as 'Text' type.
//*****************************************************************
// Copyright policy is GNU/GPL and it is requested that
// you include author's name and email on all copies
// Author : Al Dev Email: alavoor@yahoo.com
//*****************************************************************
// To prevent memory leaks - a char class to manage character variables
// Always prefer to use string class
// instead of char[] or char *
//
// To compile and test this program do -
// Assuming that libString.a is in the current directory
// g++ example_String.cpp -L. -lString
#include <stdlib.h> // for putenv
#include "String.h"
//#include <string> // This is at /usr/include/g++-2/string
//#include <cstring> // This is at /usr/include/g++-2/cstring and includes /usr/inlcude/strings.h
//
void java_string_buffer();
/////////////////////////////////////////////////
// A example program to demo usage of String
// Note: In this example, I did not use memory
// manipulation functions like new, delete, malloc,
// strdup at all!! The String class takes care of
// it automatically !!
/////////////////////////////////////////////////
int main(int argc, char **argv)
{
//java_string_buffer();
char p_name[1024];
sprintf(p_name, "PROGRAM_NAME=%s", argv[0]);
putenv(p_name);
print_total_memsize(); // in the beginning
String aa, bb, egg;
char tmpaa[100];
//bb.str_cpy(" bbSTRing ");
bb = " bbSTRing ";
// Testing the + operator
// aa + " rhs "; // You will not get any output here !!!
// You must directly use in fprintf as in below line -
fprintf(stdout, "1) aa.val() is :%sEOF\n", (aa + " my rhs " ).val());
// Testing the = operator
aa = " lhs " ;
fprintf(stdout, "2) With operator= aa.val() is :%sEOF\n", aa.val());
// Testing the + operator
// " lhs " + aa; // You will not get any output here !!!
// You must directly use in fprintf as in below line -
fprintf(stdout, "3) With lsh operator+, aa.val() is :%sEOF\n", (" my lhs " + aa ).val());
// ***************** Java like functions ********************
aa = "Some Value 2345";
fprintf(stdout, "4) aa.charAt() is :%c %sEOF\n", aa.charAt(3), aa.val());
aa = "Some Value 2345";
strcpy(tmpaa, "tmpaa value");
aa.getChars(3, 8, tmpaa, 2);
fprintf(stdout, "5) aa.getChars() is : %s %sEOF\n", tmpaa, aa.val());
aa = "Some Value 2345";
fprintf(stdout, "6) aa.toCharArray() is : %sEOF\n", aa.toCharArray());
aa = "Some2345";
if (aa.equals("Some2345"))
fprintf(stdout, "7) aa.equals() is true : %sEOF\n", aa.val());
else
fprintf(stdout, "7) aa.equals() is false : %sEOF\n", aa.val());
aa = "testinglettercase";
egg = "TestingLetterCase";
if (aa.equalsIgnoreCase(egg))
fprintf(stdout, "8) egg equals aa (case insensitive) aa.val is :%sEOF\n", aa.val());
else
fprintf(stdout, "8) egg not equals aa (case insensitive) aa.val is :%sEOF\n", aa.val());
aa = "kkktestinglettercase";
egg = "abtestingLetterCase";
if (aa.regionMatches(true, 3, egg, 2, 7))
fprintf(stdout, "9) regionMatches is true aa.val is :%sEOF\n", aa.val());
else
fprintf(stdout, "9) regionMatches is false aa.val is :%sEOF\n", aa.val());
//aa.str_cpy(bb.val());
aa = bb + "Some Value 2345";
egg = aa.toUpperCase();
fprintf(stdout, "10) egg.val is :%sEOF\n", egg.val());
aa = bb + "Some Value 2345";
egg = aa.toLowerCase();
fprintf(stdout, "11) egg.val is :%sEOF\n", egg.val());
aa = "Some Value 2345";
egg = "Some";
if (aa.startsWith("Some"))
//if (aa.startsWith(egg))
fprintf(stdout, "12) aa.startsWith() is true :%sEOF\n", aa.val());
else
fprintf(stdout, "12) aa.startsWith() is false :%sEOF\n", aa.val());
aa = "Some Value 2345";
egg = " 2345";
if (aa.endsWith(" 2345"))
//if (aa.endsWith(egg))
fprintf(stdout, "13) aa.endsWith() is true :%sEOF\n", aa.val());
else
fprintf(stdout, "13) aa.endsWith() is false :%sEOF\n", aa.val());
aa = "bbb Some Value 2345";
egg = "caabc";
if (aa.compareTo(egg) == 0)
fprintf(stdout, "14) aa.compareTo() is zero :%sEOF\n", aa.val());
else
if (aa.compareTo(egg) > 0)
fprintf(stdout, "14) aa.compareTo() is greater :%sEOF\n", aa.val());
else
if (aa.compareTo(egg) < 0)
fprintf(stdout, "14) aa.compareTo() is less than :%sEOF\n", aa.val());
aa = "bbb Some Value 2345";
strcpy(tmpaa, "aabbb Some Value 2345");
if (aa.compareTo(tmpaa) == 0)
fprintf(stdout, "15) aa.compareTo() is zero :%sEOF\n", aa.val());
else
if (aa.compareTo(tmpaa) > 0)
fprintf(stdout, "15) aa.compareTo() is greater :%sEOF\n", aa.val());
else
if (aa.compareTo(tmpaa) < 0)
fprintf(stdout, "15) aa.compareTo() is less than :%sEOF\n", aa.val());
aa = "bbb Some Value 2345";
//egg = "bbb Some Value 2345";
egg = "CCaabc"; // change values to caabc, aabc
if (aa.compareToIgnoreCase(egg) == 0)
fprintf(stdout, "16) aa.compareToIgnoreCase() is zero :%sEOF\n", aa.val());
else
if (aa.compareToIgnoreCase(egg) > 0)
fprintf(stdout, "16) aa.compareToIgnoreCase() is greater :%sEOF\n", aa.val());
else
if (aa.compareToIgnoreCase(egg) < 0)
fprintf(stdout, "16) aa.compareToIgnoreCase() is less than :%sEOF\n", aa.val());
aa = "bbb Some Value 2345";
//strcpy(tmpaa, "bbb Some Value 2345");
strcpy(tmpaa, "CAABbb Some Value 2345"); // change value to caabb, aab
if (aa.compareToIgnoreCase(tmpaa) == 0)
fprintf(stdout, "17) aa.compareToIgnoreCase() is zero :%sEOF\n", aa.val());
else
if (aa.compareToIgnoreCase(tmpaa) > 0)
fprintf(stdout, "17) aa.compareToIgnoreCase() is greater :%sEOF\n", aa.val());
else
if (aa.compareToIgnoreCase(tmpaa) < 0)
fprintf(stdout, "17) aa.compareToIgnoreCase() is less than :%sEOF\n", aa.val());
aa = "bbb Some Value 2345";
strcpy(tmpaa, "Some");
egg = "Value";
fprintf(stdout, "18) aa.indexOf('S') %d :%sEOF\n", aa.indexOf('S'), aa.val());
fprintf(stdout, "18) aa.indexOf(tmpaa) %d :%sEOF\n", aa.indexOf(tmpaa), aa.val());
fprintf(stdout, "18) aa.indexOf(egg) %d :%sEOF\n", aa.indexOf(egg), aa.val());
aa = "bbb Some Value Some 2345";
strcpy(tmpaa, "Some");
egg = "Some";
fprintf(stdout, "19) aa.lastIndexOf('S') %d :%sEOF\n", aa.lastIndexOf('S'), aa.val());
fprintf(stdout, "19) aa.lastIndexOf(tmpaa) %d :%sEOF\n", aa.lastIndexOf(tmpaa), aa.val());
fprintf(stdout, "19) aa.lastIndexOf(egg) %d :%sEOF\n", aa.lastIndexOf(egg), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "20) aa.substring(5) %s :%sEOF\n",
aa.substring(5).val(), aa.val());
aa = "bbb Some Value Some 2345";
strcpy(tmpaa, "Some");
egg = "Some";
fprintf(stdout, "20) aa.replace('S', 'V') %s :%sEOF\n",
aa.replace('S', 'V').val(), aa.val());
fprintf(stdout, "20) aa.replace(Som, Vzz) %s :%sEOF\n",
aa.replace("Som", "Vzz").val(), aa.val());
aa = " bbb Some Value Some 2345 ";
fprintf(stdout, "21) aa.trim() :%sEOF val() :%sEOF\n",
aa.trim().val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "21) aa.concat() %s val :%sEOF\n",
aa.concat("add one").val(), aa.val());
//aa = "bbb Some Value Some 2345";
//fprintf(stdout, "21) aa.append() %s val :%sEOF\n",
// aa.append("add append").val(), aa.val());
aa = "bbb Some Value Some 2345";
egg = "jjjj";
fprintf(stdout, "21) aa.insert(5, egg) %s val :%sEOF\n",
aa.insert(5, egg).val(), aa.val());
fprintf(stdout, "21) aa.insert(5, ch) %s val :%sEOF\n",
aa.insert(5, 'M').val(), aa.val());
aa = "12345678";
fprintf(stdout, "46) aa.reverse()=%s aa.val is :%sEOF\n", aa.reverse().val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "21) aa.deleteCharAt(4) %s val :%sEOF\n",
aa.deleteCharAt(4).val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "22) aa.deleteStr(3,5) %s val :%sEOF\n",
aa.deleteStr(3,5).val(), aa.val());
// ***************** end Java like functions ********************
aa = "bbb Some Value Some 2345";
fprintf(stdout, "23) aa.str_tr(bomekk, BOME) %s val :%sEOF\n",
aa.tr("bomekk", "BOME").val(), aa.val());
aa = "bbb Some Value Some 2345";
aa = "$1,934 100%.234";
fprintf(stdout, "24) aa.compress() %s val :%sEOF\n",
aa.compress("$,%").val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "25) aa.xrange('a', 'j') %s val :%sEOF\n",
aa.xrange('a', 'j').val(), aa.val());
fprintf(stdout, "25) aa.xrange('1', '8') %s val :%sEOF\n",
aa.xrange('1', '8').val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "26) aa.center(15) %s val :%sEOF\n",
aa.center(15).val(), aa.val());
fprintf(stdout, "26) aa.center(15, '*') %s val :%sEOF\n",
aa.center(15, '*').val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "27) aa.space(3) %s val :%sEOF\n",
aa.space(3).val(), aa.val());
aa = " Some Value Some 2345";
fprintf(stdout, "28) aa.left() %s val :%sEOF\n",
aa.left().val(), aa.val());
fprintf(stdout, "28) aa.left(18) %s val :%sEOF\n",
aa.left(18).val(), aa.val());
aa = " 2345 ";
fprintf(stdout, "29) aa.right():%s val :%sEOF\n",
aa.right().val(), aa.val());
fprintf(stdout, "29) aa.right(5):%s val :%sEOF\n",
aa.right(5).val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "30) aa.overlay(12345678, 4, 10, *):%s val :%sEOF\n",
aa.overlay("12345678", 4, 10, '*').val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "31) aa.at(Som) %s :%sEOF\n",
aa.at("Som").val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "32) aa.before(Som) %s :%sEOF\n",
aa.before("Skkkom").val(), aa.val());
aa = "bbb Some Value Some 2345";
fprintf(stdout, "33) aa.after(Som) %s :%sEOF\n",
aa.after("Som").val(), aa.val());
aa = " bb some value ";
aa.ltrim(true);
fprintf(stdout, "34) aa.val is :%sEOF\n", aa.val());
aa = " bb some value ";
aa.rtrim(true);
fprintf(stdout, "35) aa.val() is :%sEOF\n", aa.val());
aa = " bb some value ";
aa.trim(true);
fprintf(stdout, "36) aa.val() is :%sEOF\n", aa.val());
aa = bb;
aa = aa + " testing newlines \n\n\n\n";
aa.chopall();
fprintf(stdout, "37) aa.val() is :%sEOF\n", aa.val());
aa = bb;
aa = aa + " rhs ";
fprintf(stdout, "38) aa.val() is :%sEOF\n", aa.val());
aa = bb;
aa = " lhs " + aa;
fprintf(stdout, "39) aa.val() is :%sEOF\n", aa.val());
// Sample addition of numbers
//aa = (String) 9989 + "kkk" + 33 ;
aa = 9999;
fprintf(stdout, "40) aa.val() is :%sEOF\n", aa.val());
aa = bb;
aa = " lhs " + aa + " rhs " + " 9989 " + " 33 ";
fprintf(stdout, "41) aa.val() is :%sEOF\n", aa.val());
aa = " AA value ";
aa = bb + "alkja " + " 99djd " ;
fprintf(stdout, "42) aa.val() is :%sEOF\n", aa.val());
aa = " AA value ";
aa = (String) "alkja " + " 99djd " ;
fprintf(stdout, "43) aa.val() is :%sEOF\n", aa.val());
aa = " AA value ";
aa += (String) " al dev test kkk... " + " al2 slkj" + " al3333 ";
fprintf(stdout, "44) aa.val() is :%sEOF\n", aa.val());
aa = " AA value ";
aa = aa + " add aa " + aa + aa + aa + " 1111 " + " 2222 " + aa + aa + aa + " 3333 ";
fprintf(stdout, "45) aa.val() is :%sEOF\n", aa.val());
aa = "12345678";
aa.reverse(true);
fprintf(stdout, "46) aa.val() is :%sEOF\n", aa.val());
aa = " AA value ";
aa = aa + " add aa " + aa + 1111 +" "+ 2222 + " " + 3.344 + aa;
fprintf(stdout, "47) aa.val() is :%sEOF\n", aa.val());
aa.roundd(123456.0123456789012345, 13);
fprintf(stdout, "48) double aa.val() is :%sEOF\n", aa.val());
aa.roundf(123456.0123456789, 13);
fprintf(stdout, "49) float aa.val() is :%sEOF\n", aa.val());
// Test equal to operators
aa = " AA value ";
String cc(" AA value ");
if (aa == cc)
fprintf(stdout, "50)aa=%s and cc=%s are equal!!\n", aa.val(), cc.val());
else
fprintf(stdout, "51)aa=%s and cc=%s are NOT equal!!\n", aa.val(), cc.val());
cc = "CC";
if (aa == cc)
fprintf(stdout, "52)aa=%s and cc=%s are equal!!\n", aa.val(), cc.val());
else
fprintf(stdout, "53)aa=%s and cc=%s are NOT equal!!\n", aa.val(), cc.val());
if (aa == " AA value ")
fprintf(stdout, "54)aa=%s and string are equal!!\n", aa.val());
else
fprintf(stdout, "55)aa=%s and string are NOT equal!!\n", aa.val());
if (aa == " AA valuexxx ")
fprintf(stdout, "56)aa=%s and string are equal!!\n", aa.val());
else
fprintf(stdout, "57)aa=%s and string are NOT equal!!\n", aa.val());
aa = " AA bb value 12345678 ";
fprintf(stdout, "58) aa.length() is :%ldEOF\n", aa.length());
aa = " AA bb value 12345678 ";
fprintf(stdout, "59) aa.repeat(BA, 4).val=%s aa.val() is :%sEOF\n",
aa.repeat("BA", 4).val(), aa.val());
aa = "";
aa = "aa";
if (aa.isNull())
fprintf(stdout, "60) aa.isNull() result=true%sEOF\n", aa.val());
else
fprintf(stdout, "60) aa.isNull() result=false%sEOF\n", aa.val());
aa = " some value aa";
aa.clear();
fprintf(stdout, "61) aa.clear() %sEOF\n", aa.val());
aa = " abcd efg hijk lmno ";
fprintf(stdout, "62) aa.token():%s val :%sEOF\n",
aa.token().val(), aa.val());
fprintf(stdout, "62) aa.token():%s val :%sEOF\n",
aa.token().val(), aa.val());
fprintf(stdout, "62) aa.token():%s val :%sEOF\n",
aa.token().val(), aa.val());
fprintf(stdout, "62) aa.token():%s val :%sEOF\n",
aa.token().val(), aa.val());
fprintf(stdout, "62) aa.token():%s val :%sEOF\n",
aa.token().val(), aa.val());
aa = " 2345 ";
if (aa.isInteger()) // is true
fprintf(stdout, "63) aa is a integer val :%sEOF\n", aa.val());
else
fprintf(stdout, "63) aa is NOT a integer val :%sEOF\n", aa.val());
aa = " 23.045 ";
if (aa.isNumeric()) // is true
fprintf(stdout, "64) aa is a numeric val :%sEOF\n", aa.val());
else
fprintf(stdout, "64) aa is NOT a numeric val :%sEOF\n", aa.val());
aa = " 23045 ";
fprintf(stdout, "65) aa.int_value()=%d val :%sEOF\n",
aa.int_value(), aa.val());
aa = " 230.45 ";
fprintf(stdout, "66) aa.double_value()=%f val :%sEOF\n",
aa.double_value(), aa.val());
aa = " testing abcdefg";
aa.chop();
fprintf(stdout, "68) aa.chop() aa.val is :%sEOF\n", aa.val());
aa = " str1 str2 string3 abcdefg joe john hardy ";
String *strlist;
int strcount = 0;
strlist = aa.explode(strcount);
for (int ii = 0; ii <= strcount; ii++)
{
fprintf(stdout, "69) strlist[%d] is :%sEOF\n",
ii, strlist[ii].val());
}
aa = " some aa ";
cout << "\n\nPlease enter a line and hit return key : ";
aa.getline();
fprintf(stdout, "70) aa.getline() is :%sEOF\n", aa.val());
aa = " some aa ";
cout << "71) Testing << operator aa is : " << aa << endl;
aa = " some aa ";
cout << "\n\n73) Testing >> operator. Enter value for aa : ";
cin >> aa;
cout << "73) Testing >> operator aa is : " << aa << endl;
// You can use aa.val() like a 'char *' variable in programs !!
aa = " str1 str2 string3 abcdefg joe john hardy ";
fprintf(stdout, "\n\n74) Test case using aa.val() as 'char []' variable... ");
for (unsigned long tmpii = 0; tmpii < aa.length(); tmpii++)
{
//fprintf(stdout, "aa.val()[%ld]=%c ", tmpii, aa.val()[tmpii]);
fprintf(stdout, "aa[%ld]=%c ", tmpii, aa[tmpii]);
}
fprintf(stdout, "\n");
// Using pointers on 'char *' ...
fprintf(stdout, "\n\n75) Test case using aa.val() as 'char *' pointers... ");
aa = " str1 str2 string3 abcdefg joe john hardy ";
for (char *tmpcc = aa.val(); *tmpcc != 0; tmpcc++)
{
fprintf(stdout, "aa.val()=%c ", *tmpcc);
}
fprintf(stdout, "\n");
print_total_memsize(); // in the end
java_string_buffer();
exit(0);
}
// Sample code to demo imitation of Java's StringBuffer Object
void java_string_buffer()
{
String str1 = "ABCD EFGHI";
cout << "\nAssigned value to str1 " << endl;
StringBuffer aa;
StringBuffer bb(30);
StringBuffer cc(str1);
cout << "\n StringBuffer aa.length() : " << aa.length() << endl;
cout << "\n StringBuffer aa.capacity() : " << aa.capacity() << endl;
cout << "\n StringBuffer aa.ensureCapacity(28) : " << endl;
aa.ensureCapacity(28);
cout << "\n StringBuffer aa.setLength(38) : " << endl;
aa.setLength(38);
// In Java, you use new, in C++ remove new
// StringBuffer dd = new StringBuffer("some value for string buffer");
StringBuffer dd = StringBuffer("some value for string buffer");
cout << "\n StringBuffer dd.charAt(3) : " << dd.charAt(3) << endl;
dd.setCharAt(3, 'K');
cout << "\n StringBuffer setCharAt(3) : " << dd.charAt(3) << endl;
char ee[100];
memset(ee, 0, 100);
strcpy(ee, "111111111111111111111111111111111111");
dd.getChars(2, 12, ee, 3);
cout << "\n StringBuffer getChars(2, 12, ee, 3) : " << ee << endl;
dd.append(str1);
cout << "\n StringBuffer append() : " << dd << endl;
dd.append("12345678");
cout << "\n StringBuffer append() : " << dd << endl;
dd.append(9);
cout << "\n StringBuffer append() : " << dd << endl;
dd.append(7.876);
cout << "\n StringBuffer append() : " << dd << endl;
dd.setLength(1);
dd.append(" some value for dd");
dd.insert(4, str1);
cout << "\n StringBuffer insert() : " << dd << endl;
dd.reverse();
cout << "\n StringBuffer reverse() : " << dd << endl;
dd.setLength(1);
dd.append(" some value for dd");
dd.deleteStr(4, 9); // Java's delete()
cout << "\n StringBuffer deleteStr(4,9) : " << dd << endl;
dd.setLength(1);
dd.append(" some value for dd");
dd.deleteCharAt(6);
cout << "\n StringBuffer deleteCharAt() : " << dd << endl;
dd.setLength(1);
dd.append(" some value for dd");
dd.replace(3, 8, str1);
cout << "\n StringBuffer replace() : " << dd << endl;
dd.setLength(1);
dd.append(" some value for dd. A quick brown fox.");
dd.substring(8);
cout << "\n StringBuffer substring(8) : " << dd << endl;
dd.setLength(1);
dd.append(" some value for dd akjla akja kjk");
dd.substring(8, 14);
cout << "\n StringBuffer substring(8) : " << dd << endl;
exit(0);
}