<?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[Stringklasse, die Zahlen versteht]]></title><description><![CDATA[<p>Hi Leute... ich hoffe, ihr könnt mir weiterhelfen</p>
<p>Ich arbeite grad an einer String-Klasse, der ich neben anderen Strings auch Zahlen anhängen kann (und dort dann als Strings behandelt werden)</p>
<p>keine Angst, die FAQ hab ich soweit gelesen, aber die dort vorgestellte Lösung klappt nicht ganz...</p>
<p>Bisher sieht die Funktion so aus:</p>
<pre><code class="language-cpp">CString CString::operator +( int n )
{
   CString sTemp;
   ostringstream ssStr;
   ssStr &lt;&lt; n;
   strcpy( sTemp._acString, _acString );
   strncat( sTemp._acString, ssStr.str(), MAX - strlen( sTemp._acString ) );
   return( sTemp );
}
</code></pre>
<p>(MAX bezieht sich auf die maximal erwünschte Länge des Ergebnisstrings)</p>
<p>beim compilieren kommt dann folgender Fehler:</p>
<pre><code>CString.cpp:60: error: cannot convert 'std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;' to 'const char*' for argument '2' to 'char* strncat(char*, const char*, size_t)'
</code></pre>
<p>evtl geh ich auch ganz falsch an die Sache ran, aber ich hab keinen Plan, wie ich es anders lösen könnt</p>
<p>Danke für eure Hilfe schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/198494/stringklasse-die-zahlen-versteht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 04:20:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/198494.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Nov 2007 07:34:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Stringklasse, die Zahlen versteht on Thu, 22 Nov 2007 07:34:37 GMT]]></title><description><![CDATA[<p>Hi Leute... ich hoffe, ihr könnt mir weiterhelfen</p>
<p>Ich arbeite grad an einer String-Klasse, der ich neben anderen Strings auch Zahlen anhängen kann (und dort dann als Strings behandelt werden)</p>
<p>keine Angst, die FAQ hab ich soweit gelesen, aber die dort vorgestellte Lösung klappt nicht ganz...</p>
<p>Bisher sieht die Funktion so aus:</p>
<pre><code class="language-cpp">CString CString::operator +( int n )
{
   CString sTemp;
   ostringstream ssStr;
   ssStr &lt;&lt; n;
   strcpy( sTemp._acString, _acString );
   strncat( sTemp._acString, ssStr.str(), MAX - strlen( sTemp._acString ) );
   return( sTemp );
}
</code></pre>
<p>(MAX bezieht sich auf die maximal erwünschte Länge des Ergebnisstrings)</p>
<p>beim compilieren kommt dann folgender Fehler:</p>
<pre><code>CString.cpp:60: error: cannot convert 'std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;' to 'const char*' for argument '2' to 'char* strncat(char*, const char*, size_t)'
</code></pre>
<p>evtl geh ich auch ganz falsch an die Sache ran, aber ich hab keinen Plan, wie ich es anders lösen könnt</p>
<p>Danke für eure Hilfe schonmal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407907</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Thu, 22 Nov 2007 07:34:37 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse, die Zahlen versteht on Thu, 22 Nov 2007 07:56:53 GMT]]></title><description><![CDATA[<p>ssStr.str() liefert ein string-objekt zurück. du müsstest dem string noch mittels c_str() das char-array entlocken, damit du die funktion strncat benutzen kannst:</p>
<pre><code class="language-cpp">strncat( sTemp._acString, ssStr.str().c_str(), MAX - strlen(sTemp._acString ) );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1407916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407916</guid><dc:creator><![CDATA[ghorst]]></dc:creator><pubDate>Thu, 22 Nov 2007 07:56:53 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse, die Zahlen versteht on Thu, 22 Nov 2007 08:03:35 GMT]]></title><description><![CDATA[<p>strncat arbeitet mit const char*, du übergibst ihm aber einen std::string an zweiter Stelle. Das besagt die Fehlermeldung. also müsstest du aus ssStr.str() einen const char* machen, und zufälligerweise hat std::string genau dafür die Methode c_str() =&gt;</p>
<pre><code class="language-cpp">strncat( sTemp._acString, 
                              ssStr.str().c_str(), //&lt;-- !!!
                                                   MAX - strlen( sTemp._acString ) );
</code></pre>
<p>ABER: warum das Rad neu erfinden? die std::string Klasse hat mit ziemlicher Sicherheit bessere Performance als jede selbsterfundene Stringklasse, und sie um den nötigen Operator zu erwwitern sollte nicht allzu schwer sein. Mir persönlich missfallen die von dir verwendeten C-Routinen strncat und strcpy, sollte sich ja eigentlich um C++ handeln <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/1407918</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407918</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 22 Nov 2007 08:03:35 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse, die Zahlen versteht on Thu, 22 Nov 2007 08:06:56 GMT]]></title><description><![CDATA[<p>Und wenn du die Aufgabe eleganter lösen willst, lass die direkte Arbeit mit char* und bau deine Klasse um einen std::string herum:</p>
<pre><code class="language-cpp">CString CString::operator +( int n )
{
  CString sTemp = *this;
  ostringstream ssStr;
  ssStr &lt;&lt; n;
  sTemp._acString += ssStr.str();//btw, Bezeichner mit _ solltest du vermeiden - die sind für den Compiler reserviert
  return( sTemp );
}
</code></pre>
<p>PS: Und du sparst dir einiges an Code-Wiederholungen, wenn du operator+ durch operator+= ausdrückst:</p>
<pre><code class="language-cpp">CString&amp; CString::operator+=(int n)
{
  ostringstream ssStr;
  ssStr&lt;&lt;n;
  _acString+=ssStr.str();
  return *this;
}

CString operator+(CString l/*hier bewußt keine const-ref*/,const CString&amp; r)
{
  l+=r;
  return l;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1407921</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407921</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 22 Nov 2007 08:06:56 GMT</pubDate></item><item><title><![CDATA[Reply to Stringklasse, die Zahlen versteht on Thu, 22 Nov 2007 08:13:00 GMT]]></title><description><![CDATA[<p>danke euch beiden schonmal</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Mir persönlich missfallen die von dir verwendeten C-Routinen strncat und strcpy, sollte sich ja eigentlich um C++ handeln <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>
</blockquote>
<p>Ich persönlich nimm, was grad funktioniert, wie es soll <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>
<p>mir gings bei dem ganzen mehr um den reinen Lerneffekt als um die Funktionalität</p>
<p>ich werd mir aber mal std::string mal näher zu gemüte ziehen... Aber ich bräuchte einige doch etwas speziellere Funktionen (vor allem in Bezug im Umgang mit Zahlen (auch Fließkommazahlen), dass es mir vom Aufwand her der selbe erschien, das ganze komplett selber zu machen, als std::string entsprechend anzupassen.<br />
Die Performance an sich dürfte nicht zwingend eine Rolle spielen, da es kein allzugroßes Projekt wird...</p>
<p>-edit-<br />
Danke CStoll... hilft mir auch schonmal weiter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407926</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Thu, 22 Nov 2007 08:13:00 GMT</pubDate></item></channel></rss>