<?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[Programmcode Verständnisproblem (Thema: Strings)]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin C++-Anfänger und arbeite gerade das Tutorial auf <a href="http://www.cpp-tutor.de" rel="nofollow">www.cpp-tutor.de</a> durch.<br />
Momentan habe ich aber ein Verständnisproblem bei einer Zeile im Code eines Programms, das als Beispiel zur Veranschaulichung des Themas gegeben wurde.<br />
Das Programm zählt die Häufigkeit des Auftretens der einzelnen Buchstaben des Alphabets in einem bestimmten Text.<br />
Ich denke, einige kennen das Tutorial und den Inhalt, aber ich poste hier zum besseren Verständnis am besten den gesamten Code:</p>
<pre><code>// Lösung zur string Klasse
 #include &lt;iostream&gt;
 #include &lt;iomanip&gt;
 #include &lt;fstream&gt;
 #include &lt;string&gt;
 using std::cout;
 using std::endl;

// Konstanten für Dateiname und Anzahl der Buchstaben im Alphabet
 const char *const pFILENAME = &quot;test.txt&quot;;
 const int NUMOFCHARS = 26;

// main() Funktion
 int main()
 {
    // Datei öffnen
    std::ifstream inFile(pFILENAME);
    if (!inFile)
    {
       cout &lt;&lt; &quot;Kann Datei &quot; &lt;&lt; pFILENAME &lt;&lt; &quot; nicht öffnen!&quot; &lt;&lt; endl;
       exit(1);
    }

    // Zähler für die Anzahl der Buchstaben definieren und initialisieren
    int characters[NUMOFCHARS] = {0};
    // Zähler für Sonderzeichen wie z.B. '.' oder ',' usw.
    int specialChar = 0;

    // Schleife zum Einlesen der Datei
    do
    {
       // String für eingelesene Zeile aus der Datei
       std::string line;
       // Eine Zeile aus der Datei einlesen
       std::getline(inFile,line);
       // Falls Dateiende nicht erreicht
       if (!inFile.eof())
       {
          // Komplette Zeile durchlaufen
          for (unsigned int index=0; index&lt;line.size(); index++)
          {
             // Falls Buchstabe im String a...z
             if ((line[index]&gt;='a') &amp;&amp; (line[index]&lt;='z'))
                [b]characters[line[index]-'a']++;[/b]
             else 
                // Falls Buchstabe im String A...Z
                if ((line[index]&gt;='A') &amp;&amp; (line[index]&lt;='Z'))
                  [b]characters[line[index]-'A']++;[/b]
                else
                   // Sonderzeichen erhöhen
                   specialChar++;
          }
       }
    } while (!inFile.eof());

    // Datei auch wieder schliessen!
    inFile.close();

    // Ergebnis ausgeben
    cout &lt;&lt; &quot;Anzahl der Buchstaben in der Datei &quot; &lt;&lt; pFILENAME &lt;&lt; endl;
    // Alle Buchstabenzähler ausgeben
    for (int index=0; index&lt;NUMOFCHARS; index++)
    {
       // Nach jedem 5. Buchstaben eine neue Zeile beginnen
       if (index%5 == 0)
          cout &lt;&lt; endl;
       cout &lt;&lt; static_cast&lt;char&gt;(index+'a') &lt;&lt; &quot;: &quot; &lt;&lt; std::setw(3)
            &lt;&lt; characters[index] &lt;&lt; '\t';
    }
    // Noch Anzahl der Sonderzeichen ausgeben
    cout &lt;&lt; &quot;\nSonderzeichen: &quot; &lt;&lt; specialChar &lt;&lt; endl;
 }
</code></pre>
<p>Ich verstehe die fettgedruckten Zeilen (Zeile 44 und 48) nicht wirklich. Eventuell kann mir das jemand erklären?<br />
Danke schon im Voraus.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285385/programmcode-verständnisproblem-thema-strings</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 08:54:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285385.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Apr 2011 13:20:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmcode Verständnisproblem (Thema: Strings) on Tue, 19 Apr 2011 13:20:22 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin C++-Anfänger und arbeite gerade das Tutorial auf <a href="http://www.cpp-tutor.de" rel="nofollow">www.cpp-tutor.de</a> durch.<br />
Momentan habe ich aber ein Verständnisproblem bei einer Zeile im Code eines Programms, das als Beispiel zur Veranschaulichung des Themas gegeben wurde.<br />
Das Programm zählt die Häufigkeit des Auftretens der einzelnen Buchstaben des Alphabets in einem bestimmten Text.<br />
Ich denke, einige kennen das Tutorial und den Inhalt, aber ich poste hier zum besseren Verständnis am besten den gesamten Code:</p>
<pre><code>// Lösung zur string Klasse
 #include &lt;iostream&gt;
 #include &lt;iomanip&gt;
 #include &lt;fstream&gt;
 #include &lt;string&gt;
 using std::cout;
 using std::endl;

// Konstanten für Dateiname und Anzahl der Buchstaben im Alphabet
 const char *const pFILENAME = &quot;test.txt&quot;;
 const int NUMOFCHARS = 26;

// main() Funktion
 int main()
 {
    // Datei öffnen
    std::ifstream inFile(pFILENAME);
    if (!inFile)
    {
       cout &lt;&lt; &quot;Kann Datei &quot; &lt;&lt; pFILENAME &lt;&lt; &quot; nicht öffnen!&quot; &lt;&lt; endl;
       exit(1);
    }

    // Zähler für die Anzahl der Buchstaben definieren und initialisieren
    int characters[NUMOFCHARS] = {0};
    // Zähler für Sonderzeichen wie z.B. '.' oder ',' usw.
    int specialChar = 0;

    // Schleife zum Einlesen der Datei
    do
    {
       // String für eingelesene Zeile aus der Datei
       std::string line;
       // Eine Zeile aus der Datei einlesen
       std::getline(inFile,line);
       // Falls Dateiende nicht erreicht
       if (!inFile.eof())
       {
          // Komplette Zeile durchlaufen
          for (unsigned int index=0; index&lt;line.size(); index++)
          {
             // Falls Buchstabe im String a...z
             if ((line[index]&gt;='a') &amp;&amp; (line[index]&lt;='z'))
                [b]characters[line[index]-'a']++;[/b]
             else 
                // Falls Buchstabe im String A...Z
                if ((line[index]&gt;='A') &amp;&amp; (line[index]&lt;='Z'))
                  [b]characters[line[index]-'A']++;[/b]
                else
                   // Sonderzeichen erhöhen
                   specialChar++;
          }
       }
    } while (!inFile.eof());

    // Datei auch wieder schliessen!
    inFile.close();

    // Ergebnis ausgeben
    cout &lt;&lt; &quot;Anzahl der Buchstaben in der Datei &quot; &lt;&lt; pFILENAME &lt;&lt; endl;
    // Alle Buchstabenzähler ausgeben
    for (int index=0; index&lt;NUMOFCHARS; index++)
    {
       // Nach jedem 5. Buchstaben eine neue Zeile beginnen
       if (index%5 == 0)
          cout &lt;&lt; endl;
       cout &lt;&lt; static_cast&lt;char&gt;(index+'a') &lt;&lt; &quot;: &quot; &lt;&lt; std::setw(3)
            &lt;&lt; characters[index] &lt;&lt; '\t';
    }
    // Noch Anzahl der Sonderzeichen ausgeben
    cout &lt;&lt; &quot;\nSonderzeichen: &quot; &lt;&lt; specialChar &lt;&lt; endl;
 }
</code></pre>
<p>Ich verstehe die fettgedruckten Zeilen (Zeile 44 und 48) nicht wirklich. Eventuell kann mir das jemand erklären?<br />
Danke schon im Voraus.</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051648</guid><dc:creator><![CDATA[Conny Lingo]]></dc:creator><pubDate>Tue, 19 Apr 2011 13:20:22 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode Verständnisproblem (Thema: Strings) on Tue, 19 Apr 2011 13:28:42 GMT]]></title><description><![CDATA[<p>Der Wert von Line[index] entspricht einem ASCII-Wert der weniger 'a' / 'A' gerechnet werden muss, damit dies eine Zahl zwischen 0 und 25 ergibt. Dieser Index von &quot;characters&quot; wird dann hochgezählt.</p>
<p>Siehe auch ASCII-Tabellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051656</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 19 Apr 2011 13:28:42 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode Verständnisproblem (Thema: Strings) on Tue, 19 Apr 2011 13:32:07 GMT]]></title><description><![CDATA[<p>Du zählst die Anzahl der Buchstaben des Alphabets, unabhängig davon, ob sie klein- oder großgeschrieben werden. Dazu hast du ein Array der Länge 26, um die Anzahl der Vorkommen zu speichern. Die von dir markierten Zeilen machen nichts anderes, als den Index anhand des Zeichens zu bestimmen.<br />
Bsp:<br />
Der Buchstabe 'a' kommt gehört an den Index 0, der entsprechende Integer Wert von 'a' ist 65. 'a' ist lediglich eine andere Schreibweise für 65 (siehe ASCII Tabelle), also ziehst du 65 von 'a' ab und kommst zu Index 0. Da in der ASCII Tabelle alle Buchstaben lückenlos aufeinanderfolgen kannst du den Index einfach bestimmen:</p>
<pre><code class="language-cpp">if( CH &gt;= 'a' &amp;&amp; CH &lt;= 'z' )
{
   unsigned int Index = CH - 'a';
}
</code></pre>
<p>Für Großbuchstaben funktioniert das Ganze analog.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051660</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 19 Apr 2011 13:32:07 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode Verständnisproblem (Thema: Strings) on Tue, 19 Apr 2011 14:05:49 GMT]]></title><description><![CDATA[<p>Alles klar, habs kapiert.<br />
Ich hatte einfach nicht an die ASCII-Tabelle gedacht, damit ist das ganze logisch, jetzt versteh ich auch den Rest zu 100%.<br />
Danke nochmal!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051678</guid><dc:creator><![CDATA[Conny Lingo]]></dc:creator><pubDate>Tue, 19 Apr 2011 14:05:49 GMT</pubDate></item><item><title><![CDATA[Reply to Programmcode Verständnisproblem (Thema: Strings) on Tue, 19 Apr 2011 20:29:09 GMT]]></title><description><![CDATA[<p>Conny Lingo schrieb:</p>
<blockquote>
<p>.. arbeite gerade das Tutorial auf <a href="http://www.cpp-tutor.de" rel="nofollow">www.cpp-tutor.de</a> durch. ...<br />
Das Programm zählt die Häufigkeit des Auftretens der einzelnen Buchstaben des Alphabets in einem bestimmten Text.<br />
Ich denke, einige kennen das Tutorial und den Inhalt, aber ich poste hier zum besseren Verständnis am besten den gesamten Code:</p>
</blockquote>
<p>Hallo Conny,</p>
<p>der Code hat einen Fehler. Falls die Datei als letztes Zeichen keinen(!) LF hat, so werden die Zeichen der letzten Zeile nicht mehr mitgezählt. Finde ich für ein Tutorial ziemlich schwach. Anbei die Variante, die zumindest diesen Fehler nicht mehr hat.</p>
<pre><code class="language-cpp">// Lösung zur string Klasse ???
#include &lt;iostream&gt;
#include &lt;iomanip&gt; // setw
#include &lt;fstream&gt; 
#include &lt;cctype&gt; // tolower
using std::cout;
using std::endl;

// Konstanten für Dateiname und Anzahl der Buchstaben im Alphabet
const char *const pFILENAME = &quot;Test.txt&quot;;
const int NUMOFCHARS = 26; // besser: NUMOFCHARS = 'z'-'a'+1;

// main() Funktion
int main()
{
    // Zähler für die Anzahl der Buchstaben definieren und initialisieren
    int characters[NUMOFCHARS] = {0};
    // Zähler für Sonderzeichen wie z.B. '.' oder ',' usw.
    int specialChar = 0;
    {
        // Datei öffnen
        std::ifstream inFile(pFILENAME);
        if (!inFile)
        {
            cout &lt;&lt; &quot;Kann Datei &quot; &lt;&lt; pFILENAME &lt;&lt; &quot; nicht öffnen!&quot; &lt;&lt; endl;
            exit(1);
        }

        // ggf. inFile &gt;&gt; std::noskipws; falls Leerzeichen/LFs auch mitgezählt werden sollen
        for( char c; inFile &gt;&gt; c; )
        {
            c = std::tolower( c );
            // Falls Buchstabe im Intervall a...z
            if ((c&gt;='a') &amp;&amp; (c&lt;='z'))
                ++characters[c-'a'];

            // Sonderzeichen erhöhen
            else
                ++specialChar;
        }
    }
    // Ergebnis ausgeben
    cout &lt;&lt; &quot;Anzahl der Buchstaben in der Datei &quot; &lt;&lt; pFILENAME &lt;&lt; endl;
    // Alle Buchstabenzähler ausgeben
    for (int index=0; index&lt;NUMOFCHARS; index++)
    {
        // Nach jedem 5. Buchstaben eine neue Zeile beginnen
        if (index%5 == 0)
            cout &lt;&lt; endl;
        cout &lt;&lt; static_cast&lt;char&gt;(index+'a') &lt;&lt; &quot;: &quot; &lt;&lt; std::setw(3)
            &lt;&lt; characters[index] &lt;&lt; '\t';
    }
    // Noch Anzahl der Sonderzeichen ausgeben
    cout &lt;&lt; &quot;\nSonderzeichen: &quot; &lt;&lt; specialChar &lt;&lt; endl;

    return 0;
}
</code></pre>
<p>im übrigen verstehe ich nicht, was das mit strings zu tun haben soll.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2051812</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2051812</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 19 Apr 2011 20:29:09 GMT</pubDate></item></channel></rss>