<?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[anzahl der spalten eines strings]]></title><description><![CDATA[<p>ich habe einen string aus einer datei eingelesen. dieser kann eine beliebige form besitzen.<br />
gibt es nun eine möglichkeit die anzahl der spalten dieses strings zu ermitteln (die spalten sind voneinander durch lehrzeichen getrennt: spalte1 spalte2 spalte3...)?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284283/anzahl-der-spalten-eines-strings</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 03:22:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284283.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Mar 2011 11:08:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 11:08:58 GMT]]></title><description><![CDATA[<p>ich habe einen string aus einer datei eingelesen. dieser kann eine beliebige form besitzen.<br />
gibt es nun eine möglichkeit die anzahl der spalten dieses strings zu ermitteln (die spalten sind voneinander durch lehrzeichen getrennt: spalte1 spalte2 spalte3...)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041742</guid><dc:creator><![CDATA[cuba1]]></dc:creator><pubDate>Tue, 29 Mar 2011 11:08:58 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 11:11:25 GMT]]></title><description><![CDATA[<p>Anzahl Leerzeichen + 1.</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041744</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 29 Mar 2011 11:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 11:16:38 GMT]]></title><description><![CDATA[<p>und wie zählt man die leerzeichen am einfachsten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041746</guid><dc:creator><![CDATA[cuba1]]></dc:creator><pubDate>Tue, 29 Mar 2011 11:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 11:21:11 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string DeinString;
unsigned int Count = 0;
for(unsigned int Search = 0; Search &lt; DeinString.lenght(); Search++)
{
  if(DeinString[Search] == ' ')
    Count++;1
};
</code></pre>
<p>MfG, EOutOfResouces</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041749</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Tue, 29 Mar 2011 11:21:11 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 11:22:17 GMT]]></title><description><![CDATA[<p>boost::tokenizer ist ne gute Idee für sowas. Der zerlegt dir nen String in Einzelteile, basierend auf einem oder mehreren vorgegebenen Zeichen.<br />
Oder eine Mischung aus std::string::find_first_of und std::string::substr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041750</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Tue, 29 Mar 2011 11:22:17 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 11:26:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &lt;iostream&gt; // distance, istream_iterator
#include &lt;iterator&gt;
#include &lt;sstream&gt;
#include &lt;string&gt;

int main()
{
    using namespace std;

    string zeile = &quot;das sind vier Spalten&quot;;
    istringstream buf( zeile );
    cout &lt;&lt; &quot;Anzahl Spalten: &quot; &lt;&lt; distance( istream_iterator&lt; string &gt;(buf), istream_iterator&lt; string &gt;() ) &lt;&lt; endl;

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2041753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041753</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Tue, 29 Mar 2011 11:26:42 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 12:07:00 GMT]]></title><description><![CDATA[<p>Werner_logoff schrieb:</p>
<blockquote>
<pre><code class="language-cpp">...
    cout &lt;&lt; &quot;Anzahl Spalten: &quot; &lt;&lt; distance( istream_iterator&lt; string &gt;(buf), istream_iterator&lt; string &gt;() ) &lt;&lt; endl;
...
}
</code></pre>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Schön, wenn die Spalten auch durch mehrere und verschiedene Leerzeichen getrennt sein können und die Zeile mit Leerzeichen anfängt oder endet. Sonst reicht auch ein<br />
<code>count_if(zeile.begin(), zeile.end(), isspace)+1</code> oder <code>count(zeile.begin(), zeile.end(), ' ')+1</code></p>
<p>Sind innerhalb der Spalten auch Leerzeichen erlaubt (&quot;Spalte Nr. 1&quot; Spalte2 &quot;Spalte 3&quot;) ist der boost tokenizer wohl am einfachsten.<br />
<a href="http://www.boost.org/doc/libs/1_46_0/libs/tokenizer/escaped_list_separator.htm" rel="nofollow">http://www.boost.org/doc/libs/1_46_0/libs/tokenizer/escaped_list_separator.htm</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041779</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 29 Mar 2011 12:07:00 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 12:13:04 GMT]]></title><description><![CDATA[<p>Ich verstehe werners Code nicht. distance ermittelt doch den Abstand zwischen zwei Iteratoren. Jetzt ist der iterator ohne Argument ein past-the-end-Iterator und der erste liest was aus dem Buffer.</p>
<p>Achso, ist das, weil jede Iteration des istream_iterators einen Wert bis zu dem Leerzeichen einliest und distance über operator++ zählt? Genial.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041782</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 29 Mar 2011 12:13:04 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 12:42:57 GMT]]></title><description><![CDATA[<p>ich versteh diese zeile nicht</p>
<pre><code>cout &lt;&lt; &quot;Anzahl Spalten: &quot; &lt;&lt; distance( istream_iterator&lt; string &gt;(buf), istream_iterator&lt; string &gt;() ) &lt;&lt; endl;
</code></pre>
<p>könnte mir das bitte jemand erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041815</guid><dc:creator><![CDATA[cuba1]]></dc:creator><pubDate>Tue, 29 Mar 2011 12:42:57 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 15:39:00 GMT]]></title><description><![CDATA[<p>cuba1 schrieb:</p>
<blockquote>
<pre><code>cout &lt;&lt; &quot;Anzahl Spalten: &quot; &lt;&lt; distance( istream_iterator&lt; string &gt;(buf), istream_iterator&lt; string &gt;() ) &lt;&lt; endl;
</code></pre>
<p>könnte mir das bitte jemand erklären?</p>
</blockquote>
<p>.. hat sich noch keiner erbarmt. Nun denn</p>
<p>Der Trick besteht darin, dass man aus der Zeile Worte heraus liest. Ein Wort ist eine Folge von Zeichen (mindestens eines) ohne Leerzeichen (genauer <a href="http://de.wikipedia.org/wiki/Leerraum" rel="nofollow">White Space Character</a>). Liest man einen <code>string</code> vom<a href="http://www.cplusplus.com/reference/iostream/istream/" rel="nofollow"><code>istream</code></a> (hier Variable <code>buf</code> ) ein, so wird das nächst folgende Wort gelesen.</p>
<p>Also könnte man schreiben:</p>
<pre><code class="language-cpp">string zeile = &quot;das sind vier Spalten&quot;;
    istringstream buf( zeile );
    int wortZaehler = 0;
    for( string wort; buf &gt;&gt; wort; )
        ++wortZaehler;
    cout &lt;&lt; &quot;Anzahl Spalten: &quot; &lt;&lt; wortZaehler &lt;&lt; endl;
</code></pre>
<p>Der Ausdruck ' <code>buf &gt;&gt; wort</code> ' liefert den <code>istream</code> zurück, der in ein <code>bool</code> konvertiert werden kann, was angibt, ob das Einlesen gut ging. Somit zählt obige Schleife die Worte, unabhängig davon, ob vorher oder nachher noch Leerzeichen stehen oder nicht, und auch unabhängig davon wie viele oder welche Leerzeichen zwischen den Worten stehen.</p>
<p>Der nächste Schritt geht dahin, einen Algorithmus zu benutzen, damit man diese Schleife nicht selbst schreiben muss. Dazu muss man das Einlesen (hier der Worte) aber erst in Iteratoren 'übersetzen', da die Algorithmen aus dem C++-Standard auf Iteratoren aufsetzen. Das erledigt <a href="http://www.cplusplus.com/reference/std/iterator/istream_iterator/" rel="nofollow">istream_iterator</a>. Schau Dir das Beispiel hinter dem Link an.<br />
Und <a href="http://www.cplusplus.com/reference/std/iterator/distance/" rel="nofollow">distance</a> zahlt einfach die Anzahl, die man den ersten Iterator inkrementieren muss, um den zweiten zu erreichen.</p>
<p>Im Übrigen bin ich der Meinung, dass das ganze unnötig ist! Lies doch einfach die Dinge, die Du benötigst, gleich richtig aus der Datei aus. Wenn Du die Container des C++-Standards benutzt, so hast Du auch kein Problem mit dynamischen Strukturen.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041917</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 29 Mar 2011 15:39:00 GMT</pubDate></item><item><title><![CDATA[Reply to anzahl der spalten eines strings on Tue, 29 Mar 2011 17:20:35 GMT]]></title><description><![CDATA[<p>Dann war meine Vermutung richtig. Danke für die Erklärung <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2041961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2041961</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Tue, 29 Mar 2011 17:20:35 GMT</pubDate></item></channel></rss>