<?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[Datei als String einlesen, bearbeiten - falsche ausgabe?]]></title><description><![CDATA[<p>Hallo,<br />
ich finde meinen Fehler nicht, und ich verstehe auch ehrlich gesagt nicht wie die Ausgabe zustande kommt.</p>
<p>Hier ist die Aufgabe:<br />
1. Lese die Datei &quot;haseundigel.txt&quot; in einen String einlesen<br />
2. Entferne alle Zeichen außer Buchstaben, Leerzeichen und EOL (=End Of Line ='\n') sind, aus dem<br />
String<br />
3. Soeicher die neue Datei als &quot;hi,txt&quot; ab.</p>
<p>Mein Code ist folgender:</p>
<pre><code>string zeileBearbeiten(const string &amp; zeile)
{
	string neu = zeile;
	for(int i = 1; i&lt; zeile.size(); i++)
	{
		if(zeile[i] &lt; 64 || (zeile[i] &gt; 90 &amp;&amp; zeile[i] &lt; 97))
		{
			neu.erase(i-1,0);
		}
	}
	return neu;
}
int main()
{
	string Dateinamein = &quot;haseundigel.txt&quot;;
	string Dateinameout = &quot;hi.txt&quot;;
	string LineIn, LineOut;
	ifstream fileIn;
	ofstream fileOut;
	fileIn.open(Dateinamein.c_str());
	fileOut.open(Dateinameout.c_str());
	while(getline(fileIn, LineIn))
	{
		LineOut = zeileBearbeiten(LineIn);
		cout &lt;&lt; LineOut &lt;&lt; endl;
		fileOut &lt;&lt; LineOut &lt;&lt; endl;
	}

	return 0;
}
</code></pre>
<p>Auszug aus der Ursprungsdatei:</p>
<pre><code>Hase und Igel

Diese Geschichte ist eigentlich gelogen, Kinder, aber wahr ist sie doch, denn
mein Großvater, von dem ich sie habe, pflegte immer, wenn er sie erzälte, zu
sagen: 'Wahr muss sie sein, mein Sohn, sonst koeennte man sie ja nicht erzählen.
Die Geschichte aber hat sich so zugetragen.

Es war an einem Sonntagmorgen im Herbst, gerade als der Buchweizen blühte; die
Sonne war am Himmel aufgegangen, und der Wind strich warm über die Stoppeln,
die Lerchen sangen hoch in der Luft, und die Bienen summten im Buchweizen. Die
Leute gingen in ihrem Sonntagsstaat zur Kirche, und alle Geschoeepfe waren
vergnügt, auch der Igel.

Er stand vor seiner Tür, hatte die Arme verschränkt, er guckte in den
Morgenwind hinaus und trällerte ein kleines Liedchen vor sich hin, so gut und
so schlecht wie am Sonntagmorgen ein Igel eben zu singen pflegt. Während er
nun so vor sich hinsang, fiel ihm ploeetzlich ein, er koeennte doch, während seine
Frau die Kinder wusch und ankleidete, ein bißchen im Feld spazierengehen und
nachsehen, wie die Steckrüben standen. Die Steckrüben waren ganz nah bei
seinem Haus, und er pflegte sie mit seiner Familie zu essen, darum sah er sie
auch als die seinigen an.
</code></pre>
<p>Die Ausgabe ist jedoch folgende: (Er macht eigentlich nur Absätze rein, mehr nicht..)</p>
<pre><code>Hase und Igel

Diese Geschichte ist eigentlich gelogen, Kinder, aber wahr ist sie doch, denn
mein Großvater, von dem ich sie habe, pflegte immer, wenn er sie erzälte, zu
sagen: 'Wahr muss sie sein, mein Sohn, sonst koeennte man sie ja nicht erzählen.
Die Geschichte aber hat sich so zugetragen.

Es war an einem Sonntagmorgen im Herbst, gerade als der Buchweizen blühte; die
Sonne war am Himmel aufgegangen, und der Wind strich warm über die Stoppeln,
die Lerchen sangen hoch in der Luft, und die Bienen summten im Buchweizen. Die
Leute gingen in ihrem Sonntagsstaat zur Kirche, und alle Geschoeepfe waren
vergnügt, auch der Igel.

Er stand vor seiner Tür, hatte die Arme verschränkt, er guckte in den
Morgenwind hinaus und trällerte ein kleines Liedchen vor sich hin, so gut und
so schlecht wie am Sonntagmorgen ein Igel eben zu singen pflegt. Während er
nun so vor sich hinsang, fiel ihm ploeetzlich ein, er koeennte doch, während seine
Frau die Kinder wusch und ankleidete, ein bißchen im Feld spazierengehen und
nachsehen, wie die Steckrüben standen. Die Steckrüben waren ganz nah bei
seinem Haus, und er pflegte sie mit seiner Familie zu essen, darum sah er sie
auch als die seinigen an.
</code></pre>
<p>kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/326588/datei-als-string-einlesen-bearbeiten-falsche-ausgabe</link><generator>RSS for Node</generator><lastBuildDate>Tue, 26 May 2026 14:29:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326588.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 25 Jun 2014 07:58:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 07:58:57 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich finde meinen Fehler nicht, und ich verstehe auch ehrlich gesagt nicht wie die Ausgabe zustande kommt.</p>
<p>Hier ist die Aufgabe:<br />
1. Lese die Datei &quot;haseundigel.txt&quot; in einen String einlesen<br />
2. Entferne alle Zeichen außer Buchstaben, Leerzeichen und EOL (=End Of Line ='\n') sind, aus dem<br />
String<br />
3. Soeicher die neue Datei als &quot;hi,txt&quot; ab.</p>
<p>Mein Code ist folgender:</p>
<pre><code>string zeileBearbeiten(const string &amp; zeile)
{
	string neu = zeile;
	for(int i = 1; i&lt; zeile.size(); i++)
	{
		if(zeile[i] &lt; 64 || (zeile[i] &gt; 90 &amp;&amp; zeile[i] &lt; 97))
		{
			neu.erase(i-1,0);
		}
	}
	return neu;
}
int main()
{
	string Dateinamein = &quot;haseundigel.txt&quot;;
	string Dateinameout = &quot;hi.txt&quot;;
	string LineIn, LineOut;
	ifstream fileIn;
	ofstream fileOut;
	fileIn.open(Dateinamein.c_str());
	fileOut.open(Dateinameout.c_str());
	while(getline(fileIn, LineIn))
	{
		LineOut = zeileBearbeiten(LineIn);
		cout &lt;&lt; LineOut &lt;&lt; endl;
		fileOut &lt;&lt; LineOut &lt;&lt; endl;
	}

	return 0;
}
</code></pre>
<p>Auszug aus der Ursprungsdatei:</p>
<pre><code>Hase und Igel

Diese Geschichte ist eigentlich gelogen, Kinder, aber wahr ist sie doch, denn
mein Großvater, von dem ich sie habe, pflegte immer, wenn er sie erzälte, zu
sagen: 'Wahr muss sie sein, mein Sohn, sonst koeennte man sie ja nicht erzählen.
Die Geschichte aber hat sich so zugetragen.

Es war an einem Sonntagmorgen im Herbst, gerade als der Buchweizen blühte; die
Sonne war am Himmel aufgegangen, und der Wind strich warm über die Stoppeln,
die Lerchen sangen hoch in der Luft, und die Bienen summten im Buchweizen. Die
Leute gingen in ihrem Sonntagsstaat zur Kirche, und alle Geschoeepfe waren
vergnügt, auch der Igel.

Er stand vor seiner Tür, hatte die Arme verschränkt, er guckte in den
Morgenwind hinaus und trällerte ein kleines Liedchen vor sich hin, so gut und
so schlecht wie am Sonntagmorgen ein Igel eben zu singen pflegt. Während er
nun so vor sich hinsang, fiel ihm ploeetzlich ein, er koeennte doch, während seine
Frau die Kinder wusch und ankleidete, ein bißchen im Feld spazierengehen und
nachsehen, wie die Steckrüben standen. Die Steckrüben waren ganz nah bei
seinem Haus, und er pflegte sie mit seiner Familie zu essen, darum sah er sie
auch als die seinigen an.
</code></pre>
<p>Die Ausgabe ist jedoch folgende: (Er macht eigentlich nur Absätze rein, mehr nicht..)</p>
<pre><code>Hase und Igel

Diese Geschichte ist eigentlich gelogen, Kinder, aber wahr ist sie doch, denn
mein Großvater, von dem ich sie habe, pflegte immer, wenn er sie erzälte, zu
sagen: 'Wahr muss sie sein, mein Sohn, sonst koeennte man sie ja nicht erzählen.
Die Geschichte aber hat sich so zugetragen.

Es war an einem Sonntagmorgen im Herbst, gerade als der Buchweizen blühte; die
Sonne war am Himmel aufgegangen, und der Wind strich warm über die Stoppeln,
die Lerchen sangen hoch in der Luft, und die Bienen summten im Buchweizen. Die
Leute gingen in ihrem Sonntagsstaat zur Kirche, und alle Geschoeepfe waren
vergnügt, auch der Igel.

Er stand vor seiner Tür, hatte die Arme verschränkt, er guckte in den
Morgenwind hinaus und trällerte ein kleines Liedchen vor sich hin, so gut und
so schlecht wie am Sonntagmorgen ein Igel eben zu singen pflegt. Während er
nun so vor sich hinsang, fiel ihm ploeetzlich ein, er koeennte doch, während seine
Frau die Kinder wusch und ankleidete, ein bißchen im Feld spazierengehen und
nachsehen, wie die Steckrüben standen. Die Steckrüben waren ganz nah bei
seinem Haus, und er pflegte sie mit seiner Familie zu essen, darum sah er sie
auch als die seinigen an.
</code></pre>
<p>kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405501</guid><dc:creator><![CDATA[Rachmaninow]]></dc:creator><pubDate>Wed, 25 Jun 2014 07:58:57 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 08:01:33 GMT]]></title><description><![CDATA[<p>ich verstehe einfach nicht, woran es liegt, dass er die Kommas etc. nicht entfernt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405502</guid><dc:creator><![CDATA[rachmaninow]]></dc:creator><pubDate>Wed, 25 Jun 2014 08:01:33 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 08:06:30 GMT]]></title><description><![CDATA[<p>Wofür dient der zweite Paramter bei erase (Zeile 8)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405503</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Wed, 25 Jun 2014 08:06:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 08:18:54 GMT]]></title><description><![CDATA[<p>Meines Erachtens, gibt das an wieviel Zeichen gelöscht werden sollen. Der erste gibt den index an, der zweite wieviel gelöscht werden soll. Das ist möglicherweise der Fehler, denn wenn da 0 steht, dann löscht er ja auch keine Zeichen - richtig?<br />
Habs aber gleichmal ausprobiert. Wenn ich ne 1 reinschreibe bekomme ich eine Fehlermeldung:<br />
Unbehandelte Ausnahme bei 0x7716c42d in Hase und Igel.exe: Microsoft C++-Ausnahme: std::out_of_range an Speicherposition 0x0044fc94..</p>
<p>--&gt; Diese Fehlermeldung hatte ich eigentlich immernur bei Index fehlern.</p>
<p>und die Ausgabe lautet: (das und mehr nicht)</p>
<pre><code>Has undIgel
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2405507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405507</guid><dc:creator><![CDATA[Rachmaninow]]></dc:creator><pubDate>Wed, 25 Jun 2014 08:18:54 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 08:26:07 GMT]]></title><description><![CDATA[<p>Mit dem Debugger kannst du heraus finden in welcher Zeile dein Programm abschmiert. Ich denke mal, dass du über das Ende des Strings hinaus löscht (da er ja am Ende der Zeile abschmiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405508</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Wed, 25 Jun 2014 08:26:07 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 08:39:24 GMT]]></title><description><![CDATA[<p>Noch ein Hinweis.<br />
Deine Schleife läuft bis zeile.size() du verwendest den Index aber in 'neu' welches bei jedem Löschvorgang kürzer wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405511</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 25 Jun 2014 08:39:24 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 08:49:36 GMT]]></title><description><![CDATA[<blockquote>
<p>Leerzeichen und EOL (=End Of Line ='\n')</p>
</blockquote>
<p>EOL ist auch ein Leerzeichen.</p>
<pre><code>ifstream fileIn;
    ofstream fileOut;
    fileIn.open(Dateinamein.c_str());
    fileOut.open(Dateinameout.c_str());
</code></pre>
<ul>
<li>Filestreams mit einem Konstruktor initialisieren. Nicht mit <code>open()</code> .</li>
<li>Die Konvertierung zu einem C-String ist auch überflüssig, seit C++11.</li>
</ul>
<pre><code>ifstream fileIn(Dateinamein);
    ofstream fileOut(Dateinameout);
</code></pre>
<p>Deine Bearbeitungsfunktion ist extrem ineffizient, weil sie jeden Buchstaben einzeln löscht - aber auch weil du alles pufferst, was eigentlich überflüssig ist.</p>
<p>Stattdessen reicht ein einziger Aufruf einer STL-Funktion (!):</p>
<pre><code>ifstream fileIn(Dateinamein);
    ofstream fileOut(Dateinameout);
    std::copy_if( std::istreambuf_iterator&lt;char&gt;(fileIn), {}, std::ostreambuf_iterator&lt;char&gt;(fileOut), []( char c ) { return std::isspace(c) || std::isalpha(c); } );
</code></pre>
<p>Er kopiert die Zeichen von <code>fileIn</code> nach <code>fileOut</code> die entweder ein Whitespace oder ein Buchstabe sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405515</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 25 Jun 2014 08:49:36 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 09:17:13 GMT]]></title><description><![CDATA[<p>Rachmaninow schrieb:</p>
<blockquote>
<p>--&gt; Diese Fehlermeldung hatte ich eigentlich immernur bei Index fehlern.</p>
<p>und die Ausgabe lautet: (das und mehr nicht)</p>
<pre><code>Has undIgel
</code></pre>
</blockquote>
<p>Das mag darin liegen, dass du auch einen Indexfehler machst.<br />
0. Du fängst beim Index 1 an.<br />
1. Du löscht nicht das Leerzeichen, sondern das Zeichen davor. (Darum ist das e bei Hase weg)<br />
2. Das Zeichen ist gelöscht, du passt aber deinen Index nicht an. (Der string ist jetzt ja kürzer)<br />
3. Du testet in Zeile, änderst aber in neu.</p>
<p>Zudem ist die Aufgabe nicht richtig gelöst:<br />
1. Lese die Datei &quot;haseundigel.txt&quot; in einen String einlesen<br />
Wieviel von der Datei liest du in einen string ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405522</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405522</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Wed, 25 Jun 2014 09:17:13 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 09:24:05 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>EOL ist auch ein Leerzeichen.</p>
</blockquote>
<p>I.A wird aber bei Leerzeichen von dem Leerzeichen ' ' gesprochen.</p>
<p>EOL und Leerzeichen sind Leerraum.</p>
<p>Es sind aber totzdem unterschiedliche Zeichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405523</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Wed, 25 Jun 2014 09:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 09:29:29 GMT]]></title><description><![CDATA[<blockquote>
<p>I.A wird aber bei Leerzeichen von dem Leerzeichen ' ' gesprochen.</p>
</blockquote>
<p>Stimmt, aber wir sind in einem Programmierforum, wo das Wörtlein &quot;Leerraum&quot; nicht verwendet wird, stattdessen Whitespace. Und ich nahm an, dass er Whitespaces behalten will - ich habe immer gedacht, Leerzeichen = Whitespace, aber das ist wohl nicht der Fall.</p>
<p>Dann kann das Prädikat trivial angepasst werden - ich glaube aber nicht dass das nötig ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405526</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Wed, 25 Jun 2014 09:29:29 GMT</pubDate></item><item><title><![CDATA[Reply to Datei als String einlesen, bearbeiten - falsche ausgabe? on Wed, 25 Jun 2014 09:49:08 GMT]]></title><description><![CDATA[<p>Das Leerzeichen ist Space. Und klar, das gehört zu den Whitespace.</p>
<p>Ich hatte Leerraum auch nur genannt, damit du siehst, dass es für Whitespace eine (andere) deutsche Bezeichnung gibt.</p>
<p>Deine Annahme wird auch richtig sein, nur die Begründung war unglücklich.<br />
(Und sie hätte evtl. auch Rachmaninow das falsche denken lassen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405529</guid><dc:creator><![CDATA[DirkB]]></dc:creator><pubDate>Wed, 25 Jun 2014 09:49:08 GMT</pubDate></item></channel></rss>