<?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 replace]]></title><description><![CDATA[<p>Hi, ich hab folgenden Code um eine Datei einzulesen, und diese dann bearbeitet in neuer Datei zu speichern</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
using namespace std;

void DateiLaden()
{
    ifstream altes_file;  
    string zeile;   

    ofstream neues_file;   
    string neue_zeile;

    neues_file.open(&quot;Neu.txt&quot;,ios::app);

    size_t key;

    string re(&quot;+&quot;);

    altes_file.open(&quot;bla.txt&quot;);
    if(altes_file.is_open())
    {

        while(!altes_file.eof())
        {

                getline(altes_file,zeile);
                neue_zeile = zeile;

                key = zeile.find(&quot;|&quot;);
                neue_zeile.replace(key,2,re); // &lt;- kritische zeile

                cout &lt;&lt; neue_zeile &lt;&lt;endl;

        }
        neues_file.close();
        altes_file.close();

    }
    else
        cout &lt;&lt; &quot;Fehler&quot; &lt;&lt;endl;

}

int main()
{
    ofstream neues_file;    
    neues_file.open(&quot;Neu.txt&quot;);

    DateiLaden();
    return 0;

}
</code></pre>
<p>Wenn ich die &quot;kritische Zeile&quot; rauslasse, funktioniert das alles, aber wenn die Zeile eben drin ist, dann bekomme ich beim ausführen vom Programm diese Fehlermeldung :<br />
This application has requested the Runtime to terminate...</p>
<p>Weiss jemand woran das liegt ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/212256/problem-mit-replace</link><generator>RSS for Node</generator><lastBuildDate>Wed, 14 Oct 2026 17:24:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/212256.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 03 May 2008 19:34:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit replace on Sat, 03 May 2008 19:34:00 GMT]]></title><description><![CDATA[<p>Hi, ich hab folgenden Code um eine Datei einzulesen, und diese dann bearbeitet in neuer Datei zu speichern</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
using namespace std;

void DateiLaden()
{
    ifstream altes_file;  
    string zeile;   

    ofstream neues_file;   
    string neue_zeile;

    neues_file.open(&quot;Neu.txt&quot;,ios::app);

    size_t key;

    string re(&quot;+&quot;);

    altes_file.open(&quot;bla.txt&quot;);
    if(altes_file.is_open())
    {

        while(!altes_file.eof())
        {

                getline(altes_file,zeile);
                neue_zeile = zeile;

                key = zeile.find(&quot;|&quot;);
                neue_zeile.replace(key,2,re); // &lt;- kritische zeile

                cout &lt;&lt; neue_zeile &lt;&lt;endl;

        }
        neues_file.close();
        altes_file.close();

    }
    else
        cout &lt;&lt; &quot;Fehler&quot; &lt;&lt;endl;

}

int main()
{
    ofstream neues_file;    
    neues_file.open(&quot;Neu.txt&quot;);

    DateiLaden();
    return 0;

}
</code></pre>
<p>Wenn ich die &quot;kritische Zeile&quot; rauslasse, funktioniert das alles, aber wenn die Zeile eben drin ist, dann bekomme ich beim ausführen vom Programm diese Fehlermeldung :<br />
This application has requested the Runtime to terminate...</p>
<p>Weiss jemand woran das liegt ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502775</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502775</guid><dc:creator><![CDATA[toxor]]></dc:creator><pubDate>Sat, 03 May 2008 19:34:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit replace on Sat, 03 May 2008 19:44:06 GMT]]></title><description><![CDATA[<p>Ich glaube du musst sicherstellen das key nicht zeile.end() ist. Also kein | wurde gefunden</p>
<p>//Edit: Nicht end(), sondern string::npos</p>
<p><a href="http://www.cppreference.com/cppstring/find.html" rel="nofollow">http://www.cppreference.com/cppstring/find.html</a></p>
<pre><code class="language-cpp">// ...

if(key != string::npos)
    neue_zeile.replace(key,2,re); // &lt;- kritische zeile

//...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1502778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502778</guid><dc:creator><![CDATA[Pigeon]]></dc:creator><pubDate>Sat, 03 May 2008 19:44:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit replace on Sat, 03 May 2008 19:46:18 GMT]]></title><description><![CDATA[<p>Dass das Programm abstürzt, liegt daran, dass das Zeichen &quot;|&quot; gar nicht in der Datei vorhanden ist. Deshalb bietet sich generell bei solchen Dingen immer eine Prüfung an, die besagt, ob das Zeichen gefunden wurde oder nicht:</p>
<pre><code class="language-cpp">if(key = zeile.find(&quot;|&quot;) == string::npos) break;
neue_zeile.replace(key,2,re); // &lt;- Sie's guuute Zeile! :)
</code></pre>
<p>Edit: Wurde ja schon gesagt....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502780</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sat, 03 May 2008 19:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit replace on Sat, 03 May 2008 20:15:48 GMT]]></title><description><![CDATA[<p>aber das &quot;|&quot; zeichen existiert sehr wohl.<br />
Jetzt bringt er zwar keinen Fehler mehr, aber er macht auch nichts mehr.</p>
<p>Edit : keine Ahnung warum, aber so gehts jetzt :</p>
<pre><code class="language-cpp">key = neue_zeile.find(re); 
if(key != string::npos)
{   
     neue_zeile.replace(neue_zeile.find(re),re.length(),&quot;+&quot;);
}
</code></pre>
<p>danke trotzdem für eure Hilfe, immerhin habt ihr mich auf den richtigen Dampfer gebracht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1502783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502783</guid><dc:creator><![CDATA[toxor]]></dc:creator><pubDate>Sat, 03 May 2008 20:15:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit replace on Sat, 03 May 2008 20:24:35 GMT]]></title><description><![CDATA[<p>toxor schrieb:</p>
<blockquote>
<p>Jetzt bringt er zwar keinen Fehler mehr, aber er macht auch nichts mehr.</p>
</blockquote>
<p>Das wäre jetzt aber eine andere Seite des Blattes, Dein Kernproblem wurde ja schon behoben.</p>
<p>Ich kann Dir schlecht weiterhelfen, wenn ich nicht weiß, was Du überhaupt machen möchtest. Ich gehe mal davon aus, dass Du alle &quot;|&quot; in der Datei mit &quot;+&quot; ersetzen möchtest.</p>
<p>Da wäre folgende Lösung besser, da Du mit Deiner Lösung jeweils nur das erste gefundene &quot;|&quot; ersetzt, alle nachfolgenden Zeichen in der Zeile werden nicht ersetzt:</p>
<pre><code class="language-cpp">std::string line(&quot;kkll||&quot;);

std::size_t prev_char(0);
for(std::size_t i(0); i&lt;line.length(); ++i)
{
	prev_char = line.find(&quot;|&quot;, prev_char);
	if(prev_char != std::string::npos)
		line.replace(prev_char, 1, &quot;+&quot;);
}
</code></pre>
<p>Und um Dir die Denkarbeit zur späten Stund zu ersparen, bin ich mal so frei, und habe es Dir gleich in die Schleife gesetzt:</p>
<pre><code class="language-cpp">while(!altes_file.eof())
{
        getline(altes_file,zeile);
		neue_zeile = zeile;

		size_t prev_char(0);
        for(size_t i(0); i&lt;neue_zeile.length(); ++i)
		{
			prev_char = neue_zeile.find(&quot;|&quot;, prev_char);
			if(prev_char != string::npos)
				neue_zeile.replace(prev_char, 1, &quot;+&quot;);
		}

        cout &lt;&lt; neue_zeile &lt;&lt;endl;
}
</code></pre>
<p>Wobei Dir hoffentlich klar ist, dass der Datei-Stream neues_file unbenutzt ist, und von daher auch nichts zu erwarten ist. <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/1502789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1502789</guid><dc:creator><![CDATA[mikey]]></dc:creator><pubDate>Sat, 03 May 2008 20:24:35 GMT</pubDate></item></channel></rss>