<?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[Problem mit string]]></title><description><![CDATA[<p>Hallo<br />
ich will ein Programm schreiben das alle Zeilen einer Datei nacheinander einliest und überprüft ob eine bestimmte Zeichenkette darin vorhanden ist! Das sieht bei mir folgendermasen aus:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    ifstream dict(&quot;ger-eng.ding&quot;, ios::in);
    if(!dict.good()){
        cout &lt;&lt;&quot;ger-eng.ding konnte nicht gefunden werden\n&quot;;
        sleep(5);
        return 1;
        }
    char voc[20];
    cin &gt;&gt; voc;
    char *pvoc = &amp;voc[0];

    char next_line[500];
    int opp =1;
    do {
        dict.getline(next_line, 499);
        string *translation = new string(next_line);
        if(translation-&gt;find(pvoc)!=-1){
            //pvoc gefunden

            cout &lt;&lt; &quot;\n\n&quot;&lt;&lt; opp++ &lt;&lt;&quot;. Möglichkeit&quot; &lt;&lt; endl;
            cout &lt;&lt; translation &lt;&lt; endl;
        }
    }while(!dict.eof());
    return 0;
}
</code></pre>
<p>Jetzt weiß ich jedoch nicht was da nicht stimmt! Es wird immer nur die Zeile angezeigt in der das Wort zum ersten Mal auftaucht! An was liegt das bitte?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271441/problem-mit-string</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 12:58:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271441.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 28 Jul 2010 10:24:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 10:24:57 GMT]]></title><description><![CDATA[<p>Hallo<br />
ich will ein Programm schreiben das alle Zeilen einer Datei nacheinander einliest und überprüft ob eine bestimmte Zeichenkette darin vorhanden ist! Das sieht bei mir folgendermasen aus:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    ifstream dict(&quot;ger-eng.ding&quot;, ios::in);
    if(!dict.good()){
        cout &lt;&lt;&quot;ger-eng.ding konnte nicht gefunden werden\n&quot;;
        sleep(5);
        return 1;
        }
    char voc[20];
    cin &gt;&gt; voc;
    char *pvoc = &amp;voc[0];

    char next_line[500];
    int opp =1;
    do {
        dict.getline(next_line, 499);
        string *translation = new string(next_line);
        if(translation-&gt;find(pvoc)!=-1){
            //pvoc gefunden

            cout &lt;&lt; &quot;\n\n&quot;&lt;&lt; opp++ &lt;&lt;&quot;. Möglichkeit&quot; &lt;&lt; endl;
            cout &lt;&lt; translation &lt;&lt; endl;
        }
    }while(!dict.eof());
    return 0;
}
</code></pre>
<p>Jetzt weiß ich jedoch nicht was da nicht stimmt! Es wird immer nur die Zeile angezeigt in der das Wort zum ersten Mal auftaucht! An was liegt das bitte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933013</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933013</guid><dc:creator><![CDATA[beamer]]></dc:creator><pubDate>Wed, 28 Jul 2010 10:24:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 10:36:03 GMT]]></title><description><![CDATA[<p><em>std::string::find</em> sucht halt eben nur bis zur ersten Übereinstimmung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933016</guid><dc:creator><![CDATA[Kóyaánasqatsi]]></dc:creator><pubDate>Wed, 28 Jul 2010 10:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 10:40:56 GMT]]></title><description><![CDATA[<p>Ich habe mal ein paar Dinge kommentiert:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    ifstream dict(&quot;ger-eng.ding&quot;, ios::in);
    if(!dict.good()){ //if(dict) ist besser...
        cout &lt;&lt;&quot;ger-eng.ding konnte nicht gefunden werden\n&quot;;
        sleep(5); //wo kommt das her?
        return 1;
        }
    char voc[20]; //wieso kein std::string?
    cin &gt;&gt; voc;
    char *pvoc = &amp;voc[0]; //wozu?

    char next_line[500]; //wieso kein std::string?
    int opp =1;
    do {
        dict.getline(next_line, 499); //std::getline wäre besser als std::istream::getline
        string *translation = new string(next_line); //wieso mit new? java-programmierer?
        if(translation-&gt;find(pvoc)!=-1){ //besser std::string::npos und nicht -1
            //pvoc gefunden

            cout &lt;&lt; &quot;\n\n&quot;&lt;&lt; opp++ &lt;&lt;&quot;. Möglichkeit&quot; &lt;&lt; endl;
            cout &lt;&lt; translation &lt;&lt; endl;
        }
        //wenn schon mit new, dann das delete nicht vergessen...
    }while(!dict.eof()); //kann fehlschlagen, weil eof u.U. erst gesetzt wird, wenn man versucht hinter dem Ende zu lesen
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1933018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933018</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 28 Jul 2010 10:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 10:56:56 GMT]]></title><description><![CDATA[<p>Kóyaánasqatsi schrieb:</p>
<blockquote>
<p><em>std::string::find</em> sucht halt eben nur bis zur ersten Übereinstimmung.</p>
</blockquote>
<p>Schon richtig, nur wird ja über dict.getline(next_line, 499); immer eine neue Zeile geholt.</p>
<p>Btw finde ich das mixen von std::string und char* auch nicht so toll, entweder du bleibst bei den alten C-Strings, und benutzt z.B. strstr() als Vergleichsmethode, oder du schreibst gleich alles mit std::string.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    ifstream dict(&quot;ger-eng.ding&quot;, ios::in);
    if(!dict.is_open())
    {
        cout &lt;&lt;&quot;ger-eng.ding konnte nicht gefunden werden\n&quot;;
        return 1;
    }
    char voc[20];
    cin &gt;&gt; voc;

    char next_line[500];
    int opp = 1;
    while( !dict.eof() )
    {
        dict.getline(next_line, 499);
        if( strstr( next_line, voc ) != 0 )
        {
            //pvoc gefunden
            cout &lt;&lt; &quot;\n\n&quot;&lt;&lt; opp &lt;&lt;&quot;. Möglichkeit&quot; &lt;&lt; endl;
            cout &lt;&lt; next_line &lt;&lt; endl;
            opp++;
        }
    }
    return 0;
}
</code></pre>
<p>Das währe die (effizientere) Methode über die guten alten C-Strings.<br />
Also wenn deine eingehende Datei keine Fehler hat erscheint mir der Code eigentlich richtig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933021</guid><dc:creator><![CDATA[RedPuma]]></dc:creator><pubDate>Wed, 28 Jul 2010 10:56:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 10:49:22 GMT]]></title><description><![CDATA[<p>beamer schrieb:</p>
<blockquote>
<p>Jetzt weiß ich jedoch nicht was da nicht stimmt! Es wird immer nur die Zeile angezeigt in der das Wort zum ersten Mal auftaucht! An was liegt das bitte?</p>
</blockquote>
<p>Bei mir wird jeweils die Adresse des Aktuellen Stringobjekts angezeigt.</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933028</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933028</guid><dc:creator><![CDATA[manii66]]></dc:creator><pubDate>Wed, 28 Jul 2010 10:49:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 11:04:06 GMT]]></title><description><![CDATA[<p>Ich hab mal reingeschrieben was ich mir dabei gedacht habe...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
    ifstream dict(&quot;ger-eng.ding&quot;, ios::in);
    if(dict){
        cout &lt;&lt;&quot;ger-eng.ding konnte nicht gefunden werden\n&quot;;
        sleep(5); //wo kommt das her? -&gt; Hab Fedora
        return 1;
        }
    char voc[20]; //wieso kein std::string? -&gt; brauch dann sowieso nen char-Pointer
    cin &gt;&gt; voc;
    char *pvoc = &amp;voc[0]; //wozu?  -&gt; Brauche char-Pointer auf Zeichenkette für find()

    char next_line[500]; //wieso kein std::string? -&gt;getline braucht doch auch nen char-Pointer
    int opp =1;
    do {
        dict.getline(next_line, 499); //std::getline wäre besser als std::istream::getline
        string translation(next_line);
        if(translation-&gt;find(pvoc)!=string::npos){ 
            //pvoc gefunden

            cout &lt;&lt; &quot;\n\n&quot;&lt;&lt; opp++ &lt;&lt;&quot;. Möglichkeit&quot; &lt;&lt; endl;
            cout &lt;&lt; translation &lt;&lt; endl;
        }
    }while(!dict.eof()); //kann fehlschlagen, weil eof u.U. erst gesetzt wird, wenn man versucht hinter dem Ende zu lesen -&gt; was kann man sonst nehmen?
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1933032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933032</guid><dc:creator><![CDATA[beamer]]></dc:creator><pubDate>Wed, 28 Jul 2010 11:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 11:06:12 GMT]]></title><description><![CDATA[<p>sorry so natürlich</p>
<pre><code class="language-cpp">if(translation.find(pvoc)!=string::npos){
            //pvoc gefunden

            cout &lt;&lt; &quot;\n\n&quot;&lt;&lt; opp++ &lt;&lt;&quot;. Möglichkeit&quot; &lt;&lt; endl;
            cout &lt;&lt; translation &lt;&lt; endl;
        }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1933035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933035</guid><dc:creator><![CDATA[beamer]]></dc:creator><pubDate>Wed, 28 Jul 2010 11:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 11:12:14 GMT]]></title><description><![CDATA[<p>Wie gesagt, wenn du schon mit C-Strings hantierst dann benutz die auch konsequent und kopier nicht den C-String in nen std::string nur damit du einen Vergleich ausführen kannst. Das ist total unnötig.</p>
<blockquote>
<p>char *pvoc = &amp;voc[0]; //wozu? -&gt; Brauche char-Pointer auf Zeichenkette für find()</p>
</blockquote>
<p>Das ist auch blödsinn, schließlich ist voc ja nur ein Zeiger auf das erste Element deiner Zeichenkette. char *pvoc = voc; hätte den selben Effekt, und dann kannst du auch gleich voc weiterbenutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933038</guid><dc:creator><![CDATA[RedPuma]]></dc:creator><pubDate>Wed, 28 Jul 2010 11:12:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 11:17:15 GMT]]></title><description><![CDATA[<p>beamer schrieb:</p>
<blockquote>
<p>sorry so natürlich</p>
</blockquote>
<p>wen man jetzt noch</p>
<pre><code>if(!dict)
</code></pre>
<p>schreibt, funktioniert das Programm. Wo ist das Problem?</p>
<p>Lars</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933043</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 28 Jul 2010 11:17:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 11:33:26 GMT]]></title><description><![CDATA[<p>Bischen entschlackt und ohne Speicherleck...</p>
<pre><code class="language-cpp">int main()
{
    std::ifstream dict(&quot;ger-eng.ding&quot;); //ist eh ein *i*fstream, also kein ios::in noetig

    if(dict) //wenn stream okay...
    {
        std::string voc;
        std::getline(std::cin, voc); //in std::string einlesen. Laenge der Eingabe egal

        std::string line;
        std::size_t opp = 1;
        while(std::getline(dict, line)) //solange zeilen da-&gt; einlesen
        {
            if(line.find(voc) != std::string::npos) //kein char* noetig
            {
                std::cout &lt;&lt; &quot;\n\n&quot;&lt;&lt; opp &lt;&lt;&quot;. Möglichkeit\n&quot; &lt;&lt; line &lt;&lt; '\n';
                ++opp;
            }
        }
    }
    else //stream ist nicht okay
    {
        std::cout &lt;&lt;&quot;ger-eng.ding konnte nicht gefunden werden\n&quot;;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1933048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933048</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 28 Jul 2010 11:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit string on Wed, 28 Jul 2010 11:40:24 GMT]]></title><description><![CDATA[<p>Ok danke jetzt funktionierts!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1933057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1933057</guid><dc:creator><![CDATA[beamer]]></dc:creator><pubDate>Wed, 28 Jul 2010 11:40:24 GMT</pubDate></item></channel></rss>