<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>NeoEGM.com &#187; Class</title>
	<atom:link href="https://www.neoegm.com/tag/class/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.neoegm.com</link>
	<description>Knowledge is inside</description>
	<lastBuildDate>Mon, 08 Jul 2024 05:38:01 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>Simple C++ List Class</title>
		<link>https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/</link>
		<comments>https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 20:55:36 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Console]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[List]]></category>
		<category><![CDATA[Memory Leaks]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=976</guid>
		<description><![CDATA[Just as I published some days ago the Simple C++ String Class as a C++ learning exercise, now I am freeing a Simple C++ List Class. The standard library has a list class. But, while learning, it&#8217;s a good idea to know how to develop your own list class. That&#8217;s why I made the List [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Just as I published some days ago the <a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/">Simple C++ String Class</a> as a C++ learning exercise, now I am freeing a <strong>Simple C++ List Class</strong>.</p>
<p>The standard library has a <em>list</em> class. But, while learning, it&#8217;s a good idea to know how to develop your own <em>list</em> class.</p>
<p>That&#8217;s why I made the <em>List</em> class. It&#8217;s not intended for professional projects (for them, you should use the standard library&#8217;s <em>list</em>), but as help to learn C++.</p>
<pre class="brush: cpp; title: ; notranslate">
template &lt;class TYPE&gt;
class List
{
	/* ... */

public:
	//Construction and destruction
	List() { /* ... */ }
	~List() { /* ... */ }
	
	List(const List&amp; rlList) { /* ... */ }
	
	//Assignment operator
	List&amp; operator=(const List&amp; rlList);

	//Information
	int Length() { /* ... */ }
	bool Empty() { /* ... */ }

	//Element managing
	int Add(TYPE&amp; rtData);
	TYPE* Elem(int nPos);
	bool Delete(int nPos);
	void DeleteAll();
	
	//Search
	int Find(TYPE&amp; rItem, int nStartAt = 0);

	//Operadores
	TYPE&amp; operator[](int nPos) { /* ... */ }	//Elem
	int operator&lt;&lt;(TYPE&amp; rdData) { /* ... */ }	//Add

protected:
	void FreeList();
	void Init() { /* ... */ }
};

//Output
template &lt;class TYPE&gt;
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, List&lt;TYPE&gt;&amp; rlList);
</pre>
<p><span id="more-976"></span></p>
<p>This is a sample project made to explain the <em>List</em> class usage.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
	using std::cout;
	using std::cin;
	using std::endl;

#include &quot;List.h&quot;
#include &quot;String.h&quot;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;List sample project&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;-------------------&quot; &lt;&lt; endl &lt;&lt; endl;


	//-----------------------------
	cout &lt;&lt; &quot;&gt; Creating a list of strings... An empty string finishes the list...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt;String&gt; lStrings;
	String sTmp;
	
	do
	{
		cout &lt;&lt; &quot;&gt; String &quot; &lt;&lt; lStrings.Length()+1 &lt;&lt; &quot;: &quot;;
		cin &gt;&gt; sTmp;
		
		if (sTmp.Length())
			lStrings.Add(sTmp);
	} while (sTmp.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lStrings.Length() &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	cout &lt;&lt; lStrings;

	cout &lt;&lt; endl;
	//-----------------------------
	
	
	//-----------------------------
	do
	{
		cout &lt;&lt; &quot;&gt; Type a string to find in the list (exact match) [empty = end]: &quot;;
		cin &gt;&gt; sTmp;

		if (sTmp.Length())
		{
			int nFound = lStrings.Find(sTmp);
			
			if (nFound != -1)
			{
				lStrings.Delete(nFound);

				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; found at position &quot; &lt;&lt; nFound+1 &lt;&lt; &quot; and removed.&quot; &lt;&lt; endl &lt;&lt; endl;
				
				cout &lt;&lt; &quot;&gt; Printing list...&quot; &lt;&lt; endl &lt;&lt; endl;

				if (!lStrings.Empty())
					cout &lt;&lt; lStrings;
				else
				{
					cout &lt;&lt; &quot;[Empty list]&quot; &lt;&lt; endl &lt;&lt; endl;
					break;
				}
			}
			else
				cout &lt;&lt; &quot;&gt; String \&quot;&quot; &lt;&lt; sTmp &lt;&lt; &quot;\&quot; not found.&quot; &lt;&lt; endl;
		}
		
		cout &lt;&lt; endl;
	} while (sTmp.Length());
	
	cout &lt;&lt; endl;
	//-----------------------------

	//-----------------------------
	cout &lt;&lt; &quot;&gt; Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...&quot; &lt;&lt; endl &lt;&lt; endl;

	List&lt; List&lt;String&gt; &gt; lLists;
	List&lt;String&gt; lTmpList;
	int nStrings = 0;

	do
	{
		lTmpList.DeleteAll();
		
		cout &lt;&lt; &quot;&gt; Loading list &quot; &lt;&lt; lLists.Length()+1 &lt;&lt; &quot;...&quot; &lt;&lt; endl;
		
		do
		{
			cout &lt;&lt; &quot;\t&gt; String &quot; &lt;&lt; lTmpList.Length()+1 &lt;&lt; &quot;: &quot;;
			cin &gt;&gt; sTmp;
			
			if (sTmp.Length())
			{
				lTmpList.Add(sTmp);
				nStrings++;
			}
		} while (sTmp.Length());
		
		if (lTmpList.Length())
			lLists.Add(lTmpList);
	} while (lTmpList.Length());
	
	cout &lt;&lt; endl &lt;&lt; &quot;&gt; Entry finished. &quot; &lt;&lt; lLists.Length() &lt;&lt; &quot; list(s) loaded, &quot; &lt;&lt; nStrings &lt;&lt; &quot; string(s) loaded.&quot; &lt;&lt; endl &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;&gt; Printing lists (standard method)...&quot; &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; lLists;

	cout &lt;&lt; endl;
	
	cout &lt;&lt; &quot;&gt; Printing lists (custom method)...&quot; &lt;&lt; endl &lt;&lt; endl;
	
	for (int i = 0; i &lt; lLists.Length(); i++)
	{
		List&lt;String&gt; *plList = lLists.Elem(i);

		if (plList)
		{
			cout &lt;&lt; &quot;- List &quot; &lt;&lt; i &lt;&lt; endl &lt;&lt; endl;
			cout &lt;&lt; *plList;
			cout &lt;&lt; endl;
		}
	}
	//-----------------------------

    return 0;
}
</pre>
<p>And this is its output:</p>

<pre class="console">
List sample project
-------------------

> Creating a list of strings... An empty string finishes the list...

> String 1: Test 1
> String 2: Test 2
> String 3: Test 3, a little bit longer
> String 4:

> Entry finished. 3 string(s) loaded.

> Printing list...

Test 1
Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Hello
> String "Hello" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" found at position 1 and removed.

> Printing list...

Test 2
Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 1
> String "Test 1" not found.

> Type a string to find in the list (exact match) [empty = end]: test 2
> String "test 2" not found.

> Type a string to find in the list (exact match) [empty = end]: Test 2
> String "Test 2" found at position 1 and removed.

> Printing list...

Test 3, a little bit longer

> Type a string to find in the list (exact match) [empty = end]: Test 3, a little bit longer
> String "Test 3, a little bit longer" found at position 1 and removed.

> Printing list...

[Empty list]


> Now getting a bit more complex... Let's create a list of lists of strings... An empty string finishes the list and an empty first string finishes the list of lists...

> Loading list 1...
        > String 1: Test 1a
        > String 2: Test 1b
        > String 3: Test 1c
        > String 4:
> Loading list 2...
        > String 1: Test 2a
        > String 2: Test 2b
        > String 3: Test 2c
        > String 4: Test 2d
        > String 5:
> Loading list 3...
        > String 1: Test 3a
        > String 2: Test 3b
        > String 3: This is a looooooooooooooooooooooong string
        > String 4:
> Loading list 4...
        > String 1:

> Entry finished. 3 list(s) loaded, 10 string(s) loaded.


> Printing lists (standard method)...

Test 1a
Test 1b
Test 1c

Test 2a
Test 2b
Test 2c
Test 2d

Test 3a
Test 3b
This is a looooooooooooooooooooooong string


> Printing lists (custom method)...

- List 0

Test 1a
Test 1b
Test 1c

- List 1

Test 2a
Test 2b
Test 2c
Test 2d

- List 2

Test 3a
Test 3b
This is a looooooooooooooooooooooong string

</pre>
<p>This project also uses the <a href="http://www.neoegm.com/tech/programming/c-cpp/simple-string-class/">Simple C++ String Class</a> to show the List class working with custom classes. Exactly the same code could be without problem by simply replacing &#8220;String&#8221; with &#8220;string&#8221; and including the standard library&#8217;s <em>string</em> header.</p>
<p>The code completely is portable.</p>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle).</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">List is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p><br/><br />
I&#8217;ve also tested the project for memory leaks using the <a href="http://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/">cppMemDbg – Easy to use C++ memory leak detection library</a> and it found no problems at all&#8230;</p>
<p>You can download the library output and the cppMemDbg adapted project here:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_cppMemDbg_Output.txt">Download cppMemDbg Output</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0_cppMemDbg.zip">Download Adapted Project 1.0</a></p>
</div>
<p><br/><br />
Now, finally, the download links:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_1.0.zip">Download List Class 1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/list-class/List_Sample_Project_1.0.zip">Download List Sample Project 1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="c list class">c list class</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="list class c">list class c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="class list c">class list c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="lista simple c">lista simple c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="clase lista c">clase lista c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="LISTA SIMPLE EN C">LISTA SIMPLE EN C</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="listas simples en c">listas simples en c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="clase lista en c">clase lista en c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="c class list">c class list</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" title="list class in c">list class in c</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" rel="bookmark" title="Simple C++ String Class">Simple C++ String Class </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple C++ String Class</title>
		<link>https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/</link>
		<comments>https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 14:12:15 +0000</pubDate>
		<dc:creator><![CDATA[NeoEGM]]></dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Class]]></category>
		<category><![CDATA[Download]]></category>
		<category><![CDATA[Easy]]></category>
		<category><![CDATA[Exercise]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[GNU GPL]]></category>
		<category><![CDATA[Include]]></category>
		<category><![CDATA[Library]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Portable]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Source Code]]></category>
		<category><![CDATA[String]]></category>
		<category><![CDATA[Strings]]></category>
		<category><![CDATA[Teaching]]></category>
		<category><![CDATA[wxDev]]></category>

		<guid isPermaLink="false">http://www.neoegm.com/?p=764</guid>
		<description><![CDATA[Every C++ programmer knows that the standard library has a string class. But, while learning, it&#8217;s a good idea to know how to develop your own string class. That&#8217;s why I made the String class. It&#8217;s not intended for professional projects (for them, you should use the standard library&#8217;s string), but as help to learn [&#8230;]<div class='yarpp-related-rss'>
<strong>
Related posts:<ol>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
</ol>
</div>
]]></description>
				<content:encoded><![CDATA[<p>Every C++ programmer knows that the standard library has a <em>string</em> class. But, while learning, it&#8217;s a good idea to know how to develop your own <em>string</em> class.</p>
<p>That&#8217;s why I made the <em>String</em> class. It&#8217;s not intended for professional projects (for them, you should use the standard library&#8217;s <em>string</em>), but as help to learn C++.</p>
<pre class="brush: cpp; title: ; notranslate">
class String
{
	char *m_pszString;	//Allocated buffer
	int m_nAllocated;	//Allocated length

public:
	//Construction and destruction
	String() { /* ... */ }
	~String() { /* ... */ }

	//Copy constructors
	String(const char *pszString) { /* ... */ }
	String(const String&amp; rsString) { /* ... */ }

	//Operators (assignment)
	String&amp; operator=(const char *pszString);
	String&amp; operator=(const String&amp; rsString) { /* ... */ }

	//Operators (concatenation)
	String&amp; operator+=(const char *pszString);
	String&amp; operator+=(String&amp; rsString) { /* ... */ }
	String operator+(String rsString);

	//Operators (comparison)
	bool operator&lt;(String sString) { /* ... */ }
	bool operator&lt;=(String sString) { /* ... */ }

	bool operator&gt;(String sString) { /* ... */ }
	bool operator&gt;=(String sString) { /* ... */ }

	bool operator==(String sString) { /* ... */ }
	bool operator!=(String sString) { /* ... */ }

	//Operations
	void Clear();
	String Lower() { /* ... */ }
	String Upper() { /* ... */ }

	//Information
	int Length() { /* ... */ }

	//Cast operators
	operator const char*() { /* ... */ }

protected:	//Helper functions
	/* ... */
};

//Output e input
std::ostream&amp; operator&lt;&lt;(std::ostream&amp; oStream, String&amp; rsString);
std::istream&amp; operator&gt;&gt;(std::istream&amp; iStream, String&amp; rsString);
</pre>
<p><span id="more-764"></span></p>
<p>This is a sample project made to explain the <em>String</em> class usage.</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;iostream&gt;
	using std::cout;
	using std::cin;
	using std::endl;
#include &quot;String.h&quot;

using namespace std;

int main(int argc, char *argv[])
{
	cout &lt;&lt; &quot;String sample project&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;---------------------&quot; &lt;&lt; endl &lt;&lt; endl;

	String a(&quot;This&quot;), b(&quot;is&quot;), c(&quot;a&quot;), d(&quot;test&quot;);
	String e = a + &quot; &quot; + b + &quot; &quot; + c + &quot; &quot; + d;

	cout &lt;&lt; &quot;String parts:&quot; &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; a &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; b &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; c &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; d &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;Concatenated with spaces:&quot; &lt;&lt; endl;
	cout &lt;&lt; '\t' &lt;&lt; e &lt;&lt; endl &lt;&lt; endl;

	String f, g;

	cout &lt;&lt; &quot;Please input a string (empty to break): &quot;;
	cin &gt;&gt; f;
	cout &lt;&lt; &quot;Please input other string (empty to break): &quot;;
	cin &gt;&gt; g;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1st string (&quot; &lt;&lt; f &lt;&lt; &quot;) is &quot; &lt;&lt; f.Length() &lt;&lt; &quot; chars long.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;2nd string (&quot; &lt;&lt; g &lt;&lt; &quot;) is &quot; &lt;&lt; g.Length() &lt;&lt; &quot; chars long.&quot; &lt;&lt; endl;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1st string in lowercase is &quot; &lt;&lt; f.Lower() &lt;&lt; endl;
	cout &lt;&lt; &quot;1st string in uppercase is &quot; &lt;&lt; f.Upper() &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;2nd string in lowercase is &quot; &lt;&lt; g.Lower() &lt;&lt; endl;
	cout &lt;&lt; &quot;2nd string in uppercase is &quot; &lt;&lt; g.Upper() &lt;&lt; endl &lt;&lt; endl;

	cout &lt;&lt; &quot;1 &lt; 2\t=&gt; &quot; &lt;&lt; (f&lt;g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &lt;= 2\t=&gt; &quot; &lt;&lt; (f&lt;=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &gt; 2\t=&gt; &quot; &lt;&lt; (f&gt;g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 &gt;= 2\t=&gt; &quot; &lt;&lt; (f&gt;=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 == 2\t=&gt; &quot; &lt;&lt; (f==g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl;
	cout &lt;&lt; &quot;1 != 2\t=&gt; &quot; &lt;&lt; (f!=g?&quot;true&quot;:&quot;false&quot;) &lt;&lt; endl &lt;&lt; endl;

	if (f == g)
		cout &lt;&lt; &quot;Strings are equal.&quot; &lt;&lt; endl;
	else
		cout &lt;&lt; &quot;Strings are not equal.&quot; &lt;&lt; endl;

	cout &lt;&lt; endl;

	cout &lt;&lt; &quot;1+2\t=&gt; &quot; &lt;&lt; f+g &lt;&lt; endl;
	cout &lt;&lt; &quot;2+1\t=&gt; &quot; &lt;&lt; g+f &lt;&lt; endl;

	cout &lt;&lt; endl;

    return 0;
}
</pre>
<p>And this is its output:</p>

<pre class="console">
String sample project
---------------------

String parts:
        This
        is
        a
        test

Concatenated with spaces:
        This is a test

Please input a string (empty to break): Hello, string 1
Please input other string (empty to break): Phrase 2

1st string (Hello, string 1) is 15 chars long.
2nd string (Phrase 2) is 8 chars long.

1st string in lowercase is hello, string 1
1st string in uppercase is HELLO, STRING 1

2nd string in lowercase is phrase 2
2nd string in uppercase is PHRASE 2

1 < 2   => false
1 <= 2  => false
1 > 2   => true
1 >= 2  => true
1 == 2  => false
1 != 2  => true

Strings are not equal.

1+2     => Hello, string 1Phrase 2
2+1     => Phrase 2Hello, string 1

</pre>
<p>The code completely is portable.</p>
<p>It&#8217;s been developed, compiled and tested using <a href="http://wxdsgn.sourceforge.net/">wxDev-C++</a> for Windows with the <a href="http://www.mingw.org/">MinGW compiler</a> (included in the bundle).</p>
<p><a href="http://www.gnu.org/licenses/gpl-3.0.txt"><img src="http://www.neoegm.com/wp-content/uploads/2009/07/gplv3-127x511.png" alt="GNU GPL v3" title="GNU GPL v3" width="127" height="51" class="aligncenter size-full wp-image-251" /></a> <span class="aligncenter">String is licensed under the <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GNU GPL v3</a> (attached)&#8230;</span></p>
<p>Now the download links:</p>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/string-class/String_1.0.zip">Download String Class 1.0</a></p>
</div>
<div align="center">
<p class="download"><a href="http://download.neoegm.com/software/string-class/String_Sample_Project_1.0.zip">Download String Sample Project 1.0</a></p>
</div>
<h4>Incoming search terms for the article:</h4>
<ul>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="open source c string class">open source c string class</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="clase string c">clase string c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="C String Class Source Code">C String Class Source Code</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="string c español">string c español</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="simple string class c">simple string class c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="simple string class">simple string class</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="mail istream al loc:ES">mail istream al loc:ES</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="string c">string c</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="simple c string class">simple c string class</a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/" title="c string class source">c string class source</a></li>
</ul>
<div class='yarpp-related-rss'>
<strong><p>Related posts:<ol>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/simple-list-class/" rel="bookmark" title="Simple C++ List Class">Simple C++ List Class </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/control-de-asistencia/" rel="bookmark" title="Attendance Control">Attendance Control </a></li>
<li><a href="https://www.neoegm.com/tech/programming/c-cpp/cppmemdbg-easy-to-use-cpp-memory-leak-detection-library/" rel="bookmark" title="cppMemDbg &#8211; Easy to use C++ memory leak detection library">cppMemDbg &#8211; Easy to use C++ memory leak detection library </a></li>
</ol></p>
</div>
]]></content:encoded>
			<wfw:commentRss>https://www.neoegm.com/tech/programming/c-cpp/simple-string-class/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
