Next Previous Contents

13. Appendix A example_String.cpp

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);
}


Next Previous Contents