<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt.]]></title><description><![CDATA[<p>Ich bin immer noch bei meinem Telefonbuchprogramm, und habe nun eine Sortierklasse die mir die alles durchsortiert.<br />
Immer wenn etwas neues eingefügt wird (mit der Methode insert), dann prüft er ob mehr als ein Eintrag vorhanden ist [if (m_size!=0) m_data.put_in_order();], weil wenn ja nur ein Eintrag drin ist dann is es ja sinnlos zu sortieren.<br />
Das ganze funktioniert auch gut, aber leider nur mit Zahlen (int,....) aber bei strings funzt es schon nicht mehr.</p>
<p>Das funktioniert nicht!<br />
main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;set.hpp&quot;
#include &lt;string&gt;

int main()
{
    set&lt;std::string&gt; data_base;
    data_base.insert(&quot;Hans&quot;);
    data_base.insert(&quot;Otto&quot;);
    data_base.insert(&quot;Alex&quot;);
    data_base.insert(&quot;Oskar&quot;);
    for (int i=0;i&lt;4;i++)
    {
        std::cout &lt;&lt; data_base[i] &lt;&lt; std::endl ;
    }
	return 0;
}
</code></pre>
<p>AUSGABE:<br />
4 Zeilen, in denen aber gar nichts drin steht.<br />
Also wie wenn der Text unsichtbar wäre.<br />
Wenn ich in der Klasse &quot;set&quot; in der Methode &quot;insert&quot; (oben beschrieben) folgende Zeile Weglasse [if (m_size!=0) m_data.put_in_order();] dann wird zwar nicht mehr sortiert, aber es kommt wieder eine Ausgabe.</p>
<p>Wenn ich meine Klasse set aber mit &quot;int,....&quot; ausprobiere dann geht alles, Er sortiert fröhlich.... siehe hier:<br />
main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;set.hpp&quot;
#include &lt;string&gt;

int main()
{
    set&lt;int&gt; data_base;
    data_base.insert(67);
    data_base.insert(23);
    data_base.insert(15);
    data_base.insert(90);
    for (int i=0;i&lt;4;i++)
    {
        std::cout &lt;&lt; data_base[i] &lt;&lt; std::endl ;
    }
	return 0;
}
</code></pre>
<p>AUSGABE:<br />
15<br />
23<br />
67<br />
90</p>
<p>Ich weiß jetzt nicht genau warum das net funzt? Liegt das irgendwie an &quot;strings&quot;? Es kann ja wohl nur an denen legen. Ich hab den Code jetzt schon öfters zurückverfolgt und mir genau angeschaut was er macht.... aber ich kommt immer wieder zu dem Ergebnis das es gehen sollte. Warum zeigt er die String nach dem Sortieren nicht mehr an?<br />
Mh hier mal der ganze CODE:<br />
(die Stellen um die es geht sind markiert mit &quot;###&quot;)</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;set.hpp&quot;
#include &lt;string&gt;

int main()
{
    set&lt;int&gt; data_base;
    data_base.insert(67);
    data_base.insert(23);
    data_base.insert(15);
    data_base.insert(90);
    for (int i=0;i&lt;4;i++)
    {
        std::cout &lt;&lt; data_base[i] &lt;&lt; std::endl ;
    }
	return 0;
}
</code></pre>
<p>vector.hpp</p>
<pre><code class="language-cpp">#ifndef VECTOR_HPP_INCLUDED
#define VECTOR_HPP_INCLUDED

#include &quot;size.hpp&quot;

template &lt;class T&gt;
class vector : public size&lt;T&gt;
{
    public:
    vector(int size);
    vector(const vector &amp;rhs);
    ~vector();
    int GetSize() {return m_size;}
    T &amp;operator[] (int index);
    vector &amp;operator= (const vector &amp;rhs);
    void grow(int fields);
    void moveDown(int pos); //ohne Nullstelle!!!
    void put_in_order();

    private:
    T *m_data;
    size_t m_size;
    size_t counter;

};

template &lt;class T&gt;
vector&lt;T&gt;::vector(int size)
:m_size(size),counter(0)
{
    m_data=new T[m_size];
}

template &lt;class T&gt;
vector&lt;T&gt;::vector(const vector &amp;rhs)
:m_size(rhs.m_size),counter(rhs.counter)
{
    m_data=new T[m_size];
    for (int i=0;i&lt;m_size;i++)
    {
        m_data[i]=rhs.m_data[i];
    }
}

template &lt;class T&gt;
vector&lt;T&gt;::~vector()
{
    delete []m_data;
}

template &lt;class T&gt;
T &amp;vector&lt;T&gt;::operator[] (int index)
{
    return m_data[index];
}

template &lt;class T&gt;
vector&lt;T&gt; &amp;vector&lt;T&gt;::operator= (const vector &amp;rhs)
{
    if (&amp;rhs!=this)
    {
        delete []m_data;
        m_data=NULL;
        m_size=rhs.m_size;
        m_data=new T[m_size];
        for (int i=0;i&lt;m_size;i++)
        {
            m_data[i]=rhs.m_data[i];
        }
    }
    return *this;
}

template &lt;class T&gt;
void vector&lt;T&gt;::grow(int fields)
{
    change_size(&amp;m_data,m_size,fields);
}

template &lt;class T&gt;
void vector&lt;T&gt;::moveDown(int pos)
{
    for (size_t i=pos;i&lt;counter;i++)
    {
        m_data[i]=m_data[i+1];
    }
    counter--;
}

template &lt;class T&gt;
void vector&lt;T&gt;::put_in_order() //&lt;-- ###
{
    sort_array(m_data,m_size); //&lt;-- hier wird dann sortiert ###
    counter++; 
}

#endif // VECTOR_HPP_INCLUDED
</code></pre>
<p>size.hpp</p>
<pre><code class="language-cpp">#ifndef SIZE_HPP_INCLUDED
#define SIZE_HPP_INCLUDED

#include &quot;sort.hpp&quot;

template &lt;class T&gt;
class size : public sort&lt;T&gt;
{
    public:
    size();
    virtual ~size();
    void change_size(T **array,int length_old,int extension);
};

template &lt;class T&gt;
size&lt;T&gt;::size()
{

}

template &lt;class T&gt;
size&lt;T&gt;::~size()
{

}

template &lt;class T&gt;
void size&lt;T&gt;::change_size(T **array,int length_old,int extension)
{
    T *cache=new T[length_old];
    for (int i=0;i&lt;length_old;i++)
    {
        cache[i]=(*array)[i];
    }
    delete [](*array);
    *array=0;
    *array=new T[length_old+extension];
    for (int i=0;i&lt;length_old;i++)
    {
        (*array)[i]=cache[i];
    }
    delete []cache;
}

#endif // SIZE_HPP_INCLUDED
</code></pre>
<p>set.hpp</p>
<pre><code class="language-cpp">#ifndef SET_HPP_INCLUDED
#define SET_HPP_INCLUDED

#include &quot;vector.hpp&quot;

template &lt;class T&gt;
class set
{
    public:
    set();
    ~set();
    T *find(const T &amp;toFind);
    bool has(const T &amp;toFind);
    void insert(const T &amp;toInsert);
    void remove(const T &amp;toRemove);
    const T &amp;operator[](int index);
    vector&lt;T&gt; m_data;

    private:
    int findIndex(const T &amp;toFind);

    int m_size;
};

template &lt;class T&gt;
set&lt;T&gt;::set()
:m_data(10)
{
    m_size=0;
}

template &lt;class T&gt;
set&lt;T&gt;::~set()
{

}

template &lt;class T&gt;
T *set&lt;T&gt;::find(const T &amp;toFind)
{
    int found=findIndex(toFind);
    if (found!=-1)
    {
        return &amp;m_data[found];
    }
    else
    {
        return 0;
    }
}

template &lt;class T&gt;
bool set&lt;T&gt;::has(const T &amp;toFind)
{
    return find(toFind)!=0;
}

template &lt;class T&gt;
void set&lt;T&gt;::insert(const T &amp;toInsert)
{
    if (!has(toInsert))
    {
        if (m_size==m_data.GetSize())
        {
            m_data.grow(10);
        }
        m_data[m_size]=toInsert;
        if (m_size!=0) m_data.put_in_order(); //&lt;-- ###
        m_size++;

    }
}

template &lt;class T&gt;
int set&lt;T&gt;::findIndex(const T &amp;toFind)
{
    for (int i=0;i&lt;m_size;i++)
    {
        if (toFind==m_data[i])
        {
            return i;
        }
    }
    return -1;
}

template &lt;class T&gt;
void set&lt;T&gt;::remove(const T &amp;toRemove)
{
    int found=findIndex(toRemove);
    if (found!=-1)
    {
        m_data.moveDown(found);
        m_size--;
        m_data[m_size]=-5; //&quot;-5&quot; bedeutet --&gt; NICHT ZUGEWIESEN
    }
}

template &lt;class T&gt;
const T &amp;set&lt;T&gt;::operator[] (int index)
{
    return m_data[index];
}

#endif // SET_HPP_INCLUDED
</code></pre>
<p>sort.hpp</p>
<pre><code class="language-cpp">#ifndef SORT_HPP_INCLUDED
#define SORT_HPP_INCLUDED
#include &lt;string&gt;

//Das hier ist die SORTIER-KLASSE
template &lt;class T&gt;
class sort
{
    public:
    sort();
    ~sort();
    void sort_array(T *array,int length);
    void swap(T &amp;a,T &amp;b);

    private:

};

template &lt;class T&gt;
sort&lt;T&gt;::sort()
{

}

template &lt;class T&gt;
sort&lt;T&gt;::~sort()
{

}
template &lt;class T&gt;
void sort&lt;T&gt;::sort_array(T *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (array[tradeoff]&gt;array[j])
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}

template &lt;class T&gt;
void sort&lt;T&gt;::swap(T &amp;a,T &amp;b)
{
    const T temp=a;
    a=b;
    b=temp;
}

#endif // SORT_HPP_INCLUDED
</code></pre>
<p>So vll. is jemand so nett und stöbert mal bisschen durch meinen CODE. Wenn sich das n ausenstehender anschaut dann is das mal aus nem anderen Blickwinkel und diejenige oder derjenige weiß eventuell weiter.<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180695/telefonbuchprogramm-strings-werden-nach-dem-sortieren-nicht-mehr-angezeigt</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 22:34:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180695.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 May 2007 13:49:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sat, 05 May 2007 13:51:16 GMT]]></title><description><![CDATA[<p>Ich bin immer noch bei meinem Telefonbuchprogramm, und habe nun eine Sortierklasse die mir die alles durchsortiert.<br />
Immer wenn etwas neues eingefügt wird (mit der Methode insert), dann prüft er ob mehr als ein Eintrag vorhanden ist [if (m_size!=0) m_data.put_in_order();], weil wenn ja nur ein Eintrag drin ist dann is es ja sinnlos zu sortieren.<br />
Das ganze funktioniert auch gut, aber leider nur mit Zahlen (int,....) aber bei strings funzt es schon nicht mehr.</p>
<p>Das funktioniert nicht!<br />
main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;set.hpp&quot;
#include &lt;string&gt;

int main()
{
    set&lt;std::string&gt; data_base;
    data_base.insert(&quot;Hans&quot;);
    data_base.insert(&quot;Otto&quot;);
    data_base.insert(&quot;Alex&quot;);
    data_base.insert(&quot;Oskar&quot;);
    for (int i=0;i&lt;4;i++)
    {
        std::cout &lt;&lt; data_base[i] &lt;&lt; std::endl ;
    }
	return 0;
}
</code></pre>
<p>AUSGABE:<br />
4 Zeilen, in denen aber gar nichts drin steht.<br />
Also wie wenn der Text unsichtbar wäre.<br />
Wenn ich in der Klasse &quot;set&quot; in der Methode &quot;insert&quot; (oben beschrieben) folgende Zeile Weglasse [if (m_size!=0) m_data.put_in_order();] dann wird zwar nicht mehr sortiert, aber es kommt wieder eine Ausgabe.</p>
<p>Wenn ich meine Klasse set aber mit &quot;int,....&quot; ausprobiere dann geht alles, Er sortiert fröhlich.... siehe hier:<br />
main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;set.hpp&quot;
#include &lt;string&gt;

int main()
{
    set&lt;int&gt; data_base;
    data_base.insert(67);
    data_base.insert(23);
    data_base.insert(15);
    data_base.insert(90);
    for (int i=0;i&lt;4;i++)
    {
        std::cout &lt;&lt; data_base[i] &lt;&lt; std::endl ;
    }
	return 0;
}
</code></pre>
<p>AUSGABE:<br />
15<br />
23<br />
67<br />
90</p>
<p>Ich weiß jetzt nicht genau warum das net funzt? Liegt das irgendwie an &quot;strings&quot;? Es kann ja wohl nur an denen legen. Ich hab den Code jetzt schon öfters zurückverfolgt und mir genau angeschaut was er macht.... aber ich kommt immer wieder zu dem Ergebnis das es gehen sollte. Warum zeigt er die String nach dem Sortieren nicht mehr an?<br />
Mh hier mal der ganze CODE:<br />
(die Stellen um die es geht sind markiert mit &quot;###&quot;)</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;set.hpp&quot;
#include &lt;string&gt;

int main()
{
    set&lt;int&gt; data_base;
    data_base.insert(67);
    data_base.insert(23);
    data_base.insert(15);
    data_base.insert(90);
    for (int i=0;i&lt;4;i++)
    {
        std::cout &lt;&lt; data_base[i] &lt;&lt; std::endl ;
    }
	return 0;
}
</code></pre>
<p>vector.hpp</p>
<pre><code class="language-cpp">#ifndef VECTOR_HPP_INCLUDED
#define VECTOR_HPP_INCLUDED

#include &quot;size.hpp&quot;

template &lt;class T&gt;
class vector : public size&lt;T&gt;
{
    public:
    vector(int size);
    vector(const vector &amp;rhs);
    ~vector();
    int GetSize() {return m_size;}
    T &amp;operator[] (int index);
    vector &amp;operator= (const vector &amp;rhs);
    void grow(int fields);
    void moveDown(int pos); //ohne Nullstelle!!!
    void put_in_order();

    private:
    T *m_data;
    size_t m_size;
    size_t counter;

};

template &lt;class T&gt;
vector&lt;T&gt;::vector(int size)
:m_size(size),counter(0)
{
    m_data=new T[m_size];
}

template &lt;class T&gt;
vector&lt;T&gt;::vector(const vector &amp;rhs)
:m_size(rhs.m_size),counter(rhs.counter)
{
    m_data=new T[m_size];
    for (int i=0;i&lt;m_size;i++)
    {
        m_data[i]=rhs.m_data[i];
    }
}

template &lt;class T&gt;
vector&lt;T&gt;::~vector()
{
    delete []m_data;
}

template &lt;class T&gt;
T &amp;vector&lt;T&gt;::operator[] (int index)
{
    return m_data[index];
}

template &lt;class T&gt;
vector&lt;T&gt; &amp;vector&lt;T&gt;::operator= (const vector &amp;rhs)
{
    if (&amp;rhs!=this)
    {
        delete []m_data;
        m_data=NULL;
        m_size=rhs.m_size;
        m_data=new T[m_size];
        for (int i=0;i&lt;m_size;i++)
        {
            m_data[i]=rhs.m_data[i];
        }
    }
    return *this;
}

template &lt;class T&gt;
void vector&lt;T&gt;::grow(int fields)
{
    change_size(&amp;m_data,m_size,fields);
}

template &lt;class T&gt;
void vector&lt;T&gt;::moveDown(int pos)
{
    for (size_t i=pos;i&lt;counter;i++)
    {
        m_data[i]=m_data[i+1];
    }
    counter--;
}

template &lt;class T&gt;
void vector&lt;T&gt;::put_in_order() //&lt;-- ###
{
    sort_array(m_data,m_size); //&lt;-- hier wird dann sortiert ###
    counter++; 
}

#endif // VECTOR_HPP_INCLUDED
</code></pre>
<p>size.hpp</p>
<pre><code class="language-cpp">#ifndef SIZE_HPP_INCLUDED
#define SIZE_HPP_INCLUDED

#include &quot;sort.hpp&quot;

template &lt;class T&gt;
class size : public sort&lt;T&gt;
{
    public:
    size();
    virtual ~size();
    void change_size(T **array,int length_old,int extension);
};

template &lt;class T&gt;
size&lt;T&gt;::size()
{

}

template &lt;class T&gt;
size&lt;T&gt;::~size()
{

}

template &lt;class T&gt;
void size&lt;T&gt;::change_size(T **array,int length_old,int extension)
{
    T *cache=new T[length_old];
    for (int i=0;i&lt;length_old;i++)
    {
        cache[i]=(*array)[i];
    }
    delete [](*array);
    *array=0;
    *array=new T[length_old+extension];
    for (int i=0;i&lt;length_old;i++)
    {
        (*array)[i]=cache[i];
    }
    delete []cache;
}

#endif // SIZE_HPP_INCLUDED
</code></pre>
<p>set.hpp</p>
<pre><code class="language-cpp">#ifndef SET_HPP_INCLUDED
#define SET_HPP_INCLUDED

#include &quot;vector.hpp&quot;

template &lt;class T&gt;
class set
{
    public:
    set();
    ~set();
    T *find(const T &amp;toFind);
    bool has(const T &amp;toFind);
    void insert(const T &amp;toInsert);
    void remove(const T &amp;toRemove);
    const T &amp;operator[](int index);
    vector&lt;T&gt; m_data;

    private:
    int findIndex(const T &amp;toFind);

    int m_size;
};

template &lt;class T&gt;
set&lt;T&gt;::set()
:m_data(10)
{
    m_size=0;
}

template &lt;class T&gt;
set&lt;T&gt;::~set()
{

}

template &lt;class T&gt;
T *set&lt;T&gt;::find(const T &amp;toFind)
{
    int found=findIndex(toFind);
    if (found!=-1)
    {
        return &amp;m_data[found];
    }
    else
    {
        return 0;
    }
}

template &lt;class T&gt;
bool set&lt;T&gt;::has(const T &amp;toFind)
{
    return find(toFind)!=0;
}

template &lt;class T&gt;
void set&lt;T&gt;::insert(const T &amp;toInsert)
{
    if (!has(toInsert))
    {
        if (m_size==m_data.GetSize())
        {
            m_data.grow(10);
        }
        m_data[m_size]=toInsert;
        if (m_size!=0) m_data.put_in_order(); //&lt;-- ###
        m_size++;

    }
}

template &lt;class T&gt;
int set&lt;T&gt;::findIndex(const T &amp;toFind)
{
    for (int i=0;i&lt;m_size;i++)
    {
        if (toFind==m_data[i])
        {
            return i;
        }
    }
    return -1;
}

template &lt;class T&gt;
void set&lt;T&gt;::remove(const T &amp;toRemove)
{
    int found=findIndex(toRemove);
    if (found!=-1)
    {
        m_data.moveDown(found);
        m_size--;
        m_data[m_size]=-5; //&quot;-5&quot; bedeutet --&gt; NICHT ZUGEWIESEN
    }
}

template &lt;class T&gt;
const T &amp;set&lt;T&gt;::operator[] (int index)
{
    return m_data[index];
}

#endif // SET_HPP_INCLUDED
</code></pre>
<p>sort.hpp</p>
<pre><code class="language-cpp">#ifndef SORT_HPP_INCLUDED
#define SORT_HPP_INCLUDED
#include &lt;string&gt;

//Das hier ist die SORTIER-KLASSE
template &lt;class T&gt;
class sort
{
    public:
    sort();
    ~sort();
    void sort_array(T *array,int length);
    void swap(T &amp;a,T &amp;b);

    private:

};

template &lt;class T&gt;
sort&lt;T&gt;::sort()
{

}

template &lt;class T&gt;
sort&lt;T&gt;::~sort()
{

}
template &lt;class T&gt;
void sort&lt;T&gt;::sort_array(T *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (array[tradeoff]&gt;array[j])
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}

template &lt;class T&gt;
void sort&lt;T&gt;::swap(T &amp;a,T &amp;b)
{
    const T temp=a;
    a=b;
    b=temp;
}

#endif // SORT_HPP_INCLUDED
</code></pre>
<p>So vll. is jemand so nett und stöbert mal bisschen durch meinen CODE. Wenn sich das n ausenstehender anschaut dann is das mal aus nem anderen Blickwinkel und diejenige oder derjenige weiß eventuell weiter.<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279287</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 05 May 2007 13:51:16 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sat, 05 May 2007 13:54:30 GMT]]></title><description><![CDATA[<p>Randfrage: Warum schreibst du dir das eigentlich selber? Die Standard-Bibliothek hat doch schon zwei Klassen vector&lt;&gt; und set&lt;&gt;, die du auch nutzen könntest</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279290</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 05 May 2007 13:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sat, 05 May 2007 14:04:39 GMT]]></title><description><![CDATA[<p>CStolls Frage ist auf jeden Fall das erste, dass einem einfällt. Natürlich ist es zulässig, deine Klassen so zu benennen, dafür sind Namensräume ja da. Es ist aber in Hinblick auf die Standardbibliothek unglücklich, die gleichen Namen zu verwenden - mindestens bei Bezeichnern, die sehr häufig genutzt werden.</p>
<p>Ohne jetzt das Programm analysiert zu haben, fällt mir in set&lt;T&gt; auf, dass du einerseits Informationen doppelt speicherst (m_size ist auch in m_data enthalten), und andererseits m_size nicht initialisierst...</p>
<p>ob das ein Problem ist ? keine Ahnung - schau selber nach</p>
<p>Grundsätzlich sind nicht nur public oder protected Daten kritisch zu beurteilen; selbst innerhalb einer Klasse ist es sinnvoll, zu kapseln, und den direkten Zugriff auf Daten auf eine kleine Anzahl von Funktionen (eine Art minimales Interface im Sinne von Sutters) zu beschränken.</p>
<p>Edit: Mach dich auch mit den Algorithmen der Standardbibliothek vertraut, damit wird einiges deutlich einfacher und ausdrucksstärker. Nachdem du weist, wie du arrays mit einer Schleife kopierst, solltest du wirklich lernen, mit copy umzugehen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279292</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 05 May 2007 14:04:39 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sat, 05 May 2007 14:14:56 GMT]]></title><description><![CDATA[<p>Mh ja ich nen die halt so weil ich das so mache wie in dem Volkar Tutorial, und mich halt an die Namen von dem gehalten habe.<br />
Das schaut nur so aus, m_size in der Klasse set hat andere Werte als m_size in der Klasse vector. In der Klasse set zählt m_size immer mit wo es den nächsten Eintarg einfügen muss, also nachdem ersten Eintrag mit der Methode Insert -&gt; m_size++, also anfangs ist m_size=0; dann 1,2....... soviele Einträge es halt gibt.<br />
Und m_size in vector ist anfangs 10 und wenn das Array dann vergrößert wird, dann ist m_size=&quot;= 20....... (vergrößert wird in vector mit der Methode &quot;grow&quot;)<br />
Siehe vector.hpp Zeile 80 --&gt; change_size(&amp;m_data,m_size,fields);<br />
Dankeschön schon mal im Vroaus.</p>
<p>PS: Meine Vererbungen sind aber glaub n bissel konfus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279295</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 05 May 2007 14:14:56 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sat, 05 May 2007 14:35:20 GMT]]></title><description><![CDATA[<p>Eigentlich funktioniert das auch mit ints u.ä. nicht so richtig - allerdings wird das möglicherweise nicht sichtbar, wenn du im Debug-Modus arbeitest. Dein vector weiß nichts davon, wie viele Elemente tatsächlich mit sinnvollen Werten gefüllt sind und beim Sortieren benutzt er einfach alle, auch solche, die eigentlich erst einmal nur reserviert sind. Nun sind aber default-konstruierte Strings leere Strings. Und beim Vergleich sind diese kleiner als jeder andere String, landen also am Anfang.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279303</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 05 May 2007 14:35:20 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sun, 06 May 2007 10:08:48 GMT]]></title><description><![CDATA[<p>Danke für deinen Rat camper, stimmt natürlich, ich hab mein Programm gleich bissel umgebaut und jetzt geht alles mit dem Sortieren.<br />
So aber kommen wir gleich zu meinem nächsten Problem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Folgendes:<br />
Das hier ist ja meine SORTIER-FUNKTION</p>
<pre><code class="language-cpp">template &lt;class T&gt;
void sort&lt;T&gt;::sort_array(T *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (array[tradeoff]&gt;array[j])
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}
</code></pre>
<p>Wenn ich nun ein Array mit strings durchsortieren lasse, dann ist es so das er auch zwischen groß und kleinschreibung unterschiedet. DAs heißt also, wenn ich folgendes habe:</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;set.hpp&quot;
#include &lt;string&gt;
using namespace std;

int main()
{
    set&lt;string&gt; data_base;
    data_base.insert(&quot;zerch&quot;);
    data_base.insert(&quot;Werner&quot;);
    data_base.insert(&quot;olm&quot;);
    data_base.insert(&quot;oskar&quot;);
    data_base.insert(&quot;Hanna&quot;);
    data_base.insert(&quot;franz&quot;);
    data_base.insert(&quot;gehart&quot;);
    data_base.insert(&quot;Otto&quot;);
    data_base.insert(&quot;olga&quot;);
    data_base.insert(&quot;xaver&quot;);
    data_base.insert(&quot;gerda&quot;);
    data_base.insert(&quot;Peter&quot;);
    data_base.insert(&quot;hans&quot;);
    data_base.insert(&quot;elliott&quot;);

    for (int i=0;i&lt;14;i++)
    {
        cout &lt;&lt; data_base[i] &lt;&lt; endl;
    }
	return 0;
}
</code></pre>
<p>dann kommt das hier raus:</p>
<blockquote>
<p>Hanna<br />
Otto<br />
Peter<br />
Werner<br />
elliott<br />
franz<br />
gehart<br />
gerda<br />
hans<br />
olga<br />
olm<br />
oskar<br />
xaver<br />
zerch</p>
</blockquote>
<p>Des is aber ziemlich häslich, weil ich möchte das nicht unter groß und kleinschreibung unterschieden wird, sondern nur unter den Buchstaben im Alphabet.<br />
Das Problem ist ja das der operator &quot;&gt;&quot; bei strings diese nach den ASCII-Zeichen untersucht, was also heißt bei Großbuchstaben von 65 (für A) bis 90 (für Z), und das gleiche bei Kleinbuchstaben 97 (für a) bis 122 (für z).<br />
Also müsste ich die Buchstaben in meiner Sortier funktion irgendwie kruz vor dem sortieren alle in kleinbuchstaben umwandeln, also wie das hier:</p>
<pre><code class="language-cpp">#include &lt;ctype.h&gt;
....
.....
//in sortier Methode
if (tolower(array[tradeoff])&gt;tolower(array[j]))
......
.....
...
</code></pre>
<p>So alles schön und gut, aber wie man ja bei meiner sortier Methode (oben gepostet) sieht, handelt es sich um eine template Methode, und ich will ja da Zahlen sortieren bzw. strings.... somit muss ich die so allgemein wie möglich halten.<br />
Also kann ich das hier:</p>
<pre><code class="language-cpp">if (tolower(array[tradeoff])&gt;tolower(array[j]))
</code></pre>
<p>gar nicht machen, weil ja bei &quot;int,...&quot; Probleme kommen würden. Somit muss ich erst irgendwie feststellen ob &quot;T&quot; ein string,int.... ist [Funktionskopf: void sort&lt;T&gt;::sort_array(T *array,int length)]. Und dann halt irgendwie das so abfragen:<br />
Wenn T ein string ist dann --&gt; if (tolower(array[tradeoff])&gt;tolower(array[j]))<br />
Wenn T kein string ist dann ganz normal --&gt; if (array[tradeoff]&gt;array[j])</p>
<p>So aber wie mach ich das nun? Wie kann ich unterscheiden ob T ein &quot;float&quot; ist oder ein &quot;double&quot; oder ein &quot;string&quot;......???<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279585</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 May 2007 10:08:48 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sun, 06 May 2007 10:36:28 GMT]]></title><description><![CDATA[<p>Der Groß- und Kleinschreibungs - Vergleich von String ist in C++ eine etwas längere Geschichte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> ( Exceptional C++ oder hier: <a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=stricmp#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=stricmp#Answ</a> steht auch nen bissl was dazu ).</p>
<p>Zu deinem Problem: In dem falle würde dir TemplateSpezialisierung helfen:</p>
<pre><code class="language-cpp">template&lt;class T&gt; void func() { }
//func() für ints spezialsiert
template&lt;&gt; void func&lt;int&gt; () {}
</code></pre>
<p>Das nur auf dein Beispiel abstimmen und sorg dafür das dein Sortier-Code ausgelagert ist und deine template Funktion diese aufrufen.<br />
Wandel die String in Groß/Klein um und übergib sie deinem sort().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279602</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 06 May 2007 10:36:28 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sun, 06 May 2007 11:22:38 GMT]]></title><description><![CDATA[<p>Meinst du sowas?</p>
<pre><code class="language-cpp">....
template &lt;class T&gt;
void sort&lt;T&gt;::sort_array(T *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (array[tradeoff]&gt;array[j])
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}

template &lt;class T&gt;
void sort&lt;T&gt;::sort_array&lt;std::string&gt;(T *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (tolower(array[tradeoff])&gt;tolower(array[j]))
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}
.....
</code></pre>
<p>Das funzt aber irgendwie net bei mir.<br />
Da kommt:</p>
<blockquote>
<p>-------------- Build: Debug in Telefonbuch ---------------<br />
Compiling: main.cpp<br />
In file included from size.hpp:4,<br />
from vector.hpp:4,<br />
from set.hpp:6,<br />
from main.cpp:2:<br />
sort.hpp:51: error: expected init-declarator before '&lt;' token<br />
sort.hpp:51: error: expected `;' before '&lt;' token<br />
Process terminated with status 1 (0 minutes, 0 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>Mh ich kenn mich leider mit templates no net so gut aus, das mit der template Spezialisierung hab ich au no nie gehört, weil ich sowas spezielles eigentlich noch nie gebraucht habe. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Na ja aber es gibt ja immer ein erstes mal! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Is das sowas wie überladen, das mit der template Spezialisierung? Oder kann ich das vll. irgendwie auch mit &quot;string&quot; überladen? Oder ist das dann template Spezialisierung? Kann sich jemand vorstellen was ich meine?<br />
Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279617</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 May 2007 11:22:38 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sun, 06 May 2007 12:05:12 GMT]]></title><description><![CDATA[<p>Dein sort für Elementfunktion muss so aussehen:</p>
<pre><code class="language-cpp">template &lt;&gt;
void sort&lt;T&gt;::sort_array&lt;std::string&gt;(std::string *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (tolower(array[tradeoff])&gt;tolower(array[j]))
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}
</code></pre>
<p>Erinnerung: Versuche doppelten gleichen Code zu meiden.</p>
<p>Hier ist ein guter Artikel für Templates: <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-128361.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-128361.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279628</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 06 May 2007 12:05:12 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sun, 06 May 2007 12:26:38 GMT]]></title><description><![CDATA[<p>Irgendwie funzts nicht:</p>
<pre><code class="language-cpp">#ifndef SORT_HPP_INCLUDED
#define SORT_HPP_INCLUDED

#include &lt;string&gt;
#include &lt;ctype.h&gt;

template &lt;class T&gt;
class sort
{
    public:
    sort();
    ~sort();
    void sort_array(T *array,int length);
    void swap(T &amp;a,T &amp;b);

    private:

};

template &lt;class T&gt;
sort&lt;T&gt;::sort()
{

}

template &lt;class T&gt;
sort&lt;T&gt;::~sort()
{

}
template &lt;class T&gt;
void sort&lt;T&gt;::sort_array(T *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (array[tradeoff]&gt;array[j])
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}

template &lt;&gt;
void sort&lt;T&gt;::sort_array&lt;std::string&gt;(std::string *array,int length)
{
    int tradeoff=0;
    for (int i=0;i&lt;length-1;i++)
    {
        tradeoff=i;
        for (int j=i;j&lt;length;j++)
        {
            if (tolower(array[tradeoff])&gt;tolower(array[j]))
            {
                tradeoff=j;
            }
        }
        swap(array[i],array[tradeoff]);
    }
}

template &lt;class T&gt;
void sort&lt;T&gt;::swap(T &amp;a,T &amp;b)
{
    const T temp=a;
    a=b;
    b=temp;
}

#endif // SORT_HPP_INCLUDED
</code></pre>
<p>Aber so hast dus doch gemeint oder?</p>
<p>EROOR:</p>
<blockquote>
<p>-------------- Build: Debug in Telefonbuch ---------------<br />
Compiling: main.cpp<br />
In file included from size.hpp:4,<br />
from vector.hpp:4,<br />
from set.hpp:6,<br />
from main.cpp:2:<br />
sort.hpp:52: error: <code>T' was not declared in this scope sort.hpp:52: error: template argument 1 is invalid sort.hpp:52: error: expected init-declarator before '&lt;' token sort.hpp:52: error: expected</code>;' before '&lt;' token<br />
Process terminated with status 1 (0 minutes, 0 seconds)<br />
4 errors, 0 warnings</p>
</blockquote>
<p>Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279635</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 06 May 2007 12:26:38 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sun, 06 May 2007 12:48:29 GMT]]></title><description><![CDATA[<p>Übergib deinem Set doch einfach als weiteren Parameter eine Comperator Klasse, die du per default auf less_then (oder wie hiesz die??) stellst. Wenn du dann eben ohne Grosz-Kleinschreibung vergleichen willst-&gt; lies Volkards tut ein bisschen weiter bis zur NoCaseStringComperator-Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1279648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279648</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sun, 06 May 2007 12:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Telefonbuchprogramm - Strings werden nach dem Sortieren nicht mehr angezeigt. on Sun, 06 May 2007 13:29:14 GMT]]></title><description><![CDATA[<p>Ach murks, habe irgendwie was vercheckt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
So ist es logisch und muss es aussehen:</p>
<pre><code class="language-cpp">template &lt;&gt;
void sort&lt;std::string&gt;::sort_array(std::string *array,int length)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1279669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1279669</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 06 May 2007 13:29:14 GMT</pubDate></item></channel></rss>