<?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 Stringtransformation]]></title><description><![CDATA[<p>guten tag erstmal,</p>
<p>benötige dringend eine 2te/3te/4te meinung, da ich seit tagen festsitz und<br />
mittlerweile echt auf dem schlauch steh,<br />
weil ich nicht erkennen kann wo das Problem liegen könnte.</p>
<p>Die aufgabe ist einen eingegebenen satz so zu ändern das er Wort für Wort umgedreht wird und dann ausgegeben<br />
Bsp.ein hund spielt im garten --&gt; nie dnuh tleips mi netrag</p>
<p>habe dazu folgenden code geschrieben:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;cstddef&gt;
using namespace std;

int main()
{
	size_t j=0,k=0;
	string satz,invert;
	cout&lt;&lt;&quot;Geben sie den zu Ändernden Satz in die Konsole ein&quot;&lt;&lt;endl;
	getline(cin,satz);
	invert=satz;
	for(size_t i=0;i&lt;satz.size();i++)
	{
		if(satz[i]==' '||i==satz.size()-1)					//durchsuchen des strings auf ende eines wortes(satz[i-1]führt zu abbruch)
		{
			for(k,j=i;k&lt;=i&amp;&amp;j!=' ';j--,k++)					//j=i um ausgangs laufvariable zu erhalten.j liest das wort rückwärts k schreibt vorwärts in neuen string
			{
				if(satz[j]!=' ')							//zum erhalt der original leerzeichen, soll nur gedreht werden wenn kein &quot; &quot; vorhanden ist.
				{
				invert[k]=satz[j];			
				}
				else										//andernfalls soll ein &quot; &quot; geschrieben werden.
				{invert[k]=' ';}
			}
		}
	}
	cout&lt;&lt;&quot;Invert Satz:\n&quot;&lt;&lt;invert&lt;&lt;endl;

system(&quot;pause&quot;);
}
</code></pre>
<p>[code]</p>
<p>mein Problem ist nur dass die Leerzeichen nicht an den stellen sitzen wo sie hinsollen,<br />
beziehungsweise nicht dort sind wo sie im original satz stehen.<br />
dabei scheint mir der lösungsweg logisch. vielleciht weiss jmd einen anderen oder sieht den Fehler in meiner konstruktion.<br />
vielen dank schonmal im vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284474/problem-mit-stringtransformation</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 02:27:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284474.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 02 Apr 2011 11:34:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Stringtransformation on Sat, 02 Apr 2011 11:34:16 GMT]]></title><description><![CDATA[<p>guten tag erstmal,</p>
<p>benötige dringend eine 2te/3te/4te meinung, da ich seit tagen festsitz und<br />
mittlerweile echt auf dem schlauch steh,<br />
weil ich nicht erkennen kann wo das Problem liegen könnte.</p>
<p>Die aufgabe ist einen eingegebenen satz so zu ändern das er Wort für Wort umgedreht wird und dann ausgegeben<br />
Bsp.ein hund spielt im garten --&gt; nie dnuh tleips mi netrag</p>
<p>habe dazu folgenden code geschrieben:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;cstddef&gt;
using namespace std;

int main()
{
	size_t j=0,k=0;
	string satz,invert;
	cout&lt;&lt;&quot;Geben sie den zu Ändernden Satz in die Konsole ein&quot;&lt;&lt;endl;
	getline(cin,satz);
	invert=satz;
	for(size_t i=0;i&lt;satz.size();i++)
	{
		if(satz[i]==' '||i==satz.size()-1)					//durchsuchen des strings auf ende eines wortes(satz[i-1]führt zu abbruch)
		{
			for(k,j=i;k&lt;=i&amp;&amp;j!=' ';j--,k++)					//j=i um ausgangs laufvariable zu erhalten.j liest das wort rückwärts k schreibt vorwärts in neuen string
			{
				if(satz[j]!=' ')							//zum erhalt der original leerzeichen, soll nur gedreht werden wenn kein &quot; &quot; vorhanden ist.
				{
				invert[k]=satz[j];			
				}
				else										//andernfalls soll ein &quot; &quot; geschrieben werden.
				{invert[k]=' ';}
			}
		}
	}
	cout&lt;&lt;&quot;Invert Satz:\n&quot;&lt;&lt;invert&lt;&lt;endl;

system(&quot;pause&quot;);
}
</code></pre>
<p>[code]</p>
<p>mein Problem ist nur dass die Leerzeichen nicht an den stellen sitzen wo sie hinsollen,<br />
beziehungsweise nicht dort sind wo sie im original satz stehen.<br />
dabei scheint mir der lösungsweg logisch. vielleciht weiss jmd einen anderen oder sieht den Fehler in meiner konstruktion.<br />
vielen dank schonmal im vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043659</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043659</guid><dc:creator><![CDATA[rettich]]></dc:creator><pubDate>Sat, 02 Apr 2011 11:34:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Stringtransformation on Sat, 02 Apr 2011 11:43:08 GMT]]></title><description><![CDATA[<p>Die innere Schleife sieht auf jeden Fall seltsam aus - k wird nicht initialisiert und dann vergleichst du den Index j mit dem Leerzeichen anstelle des Zeichens an Stelle j.</p>
<p>Ich hätte vermutlich mit find_first_of() die einzelnen Leerzeichen gesucht, den Eingabestring zerlegt, die einzelnen Teile invertiert und wieder zusammengebaut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043661</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 11:43:08 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Stringtransformation on Sat, 02 Apr 2011 11:57:31 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include&lt;iostream&gt; 
#include&lt;string&gt; 

int main() 
{ 
  std::string Line;
  std::cout &lt;&lt; &quot;Geben Sie den zu ändernden Satz in ein:\n&quot;;
  std::getline(std::cin, Line);
  for(unsigned int Split = 0, Last = 0; Split &lt; Line.lenght(); Split++)
  {
    if(Line[Split] == ' ')
    {
      std::string Part(Line.substr(Last, Split - Last));
      for(unsigned int Reverse = Last; Reverse &lt; Split; Reverse++)
      {
        Line[Reverse] = Part[Last - Reverse];
      }
      Last = Split;
    }
  }
  std::cout &lt;&lt; &quot;\nResultat:\n&quot;;
  std::cout &lt;&lt; Line;
  std::cin.get();
}
</code></pre>
<p>Ungetestet.</p>
<p>MfG, EOutOfResources</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043664</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sat, 02 Apr 2011 11:57:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Stringtransformation on Sat, 02 Apr 2011 12:22:10 GMT]]></title><description><![CDATA[<p>Hmm mein Vorschlag wäre jetzt mittels istringstream und die Verwendung der STL:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt; 
#include &lt;string&gt;
#include &lt;sstream&gt;

using namespace std; 

int main() 
{ 
	const char delimiter = ' ';

    cout&lt;&lt;&quot;Geben Sie einen Satz ein: &quot;; 
	string eingabe;
	getline(cin, eingabe);
	istringstream str(eingabe);

    string invert, wort;
	while(getline(str, wort, delimiter)){		//splitten der Wörter
		std::reverse(wort.begin(),wort.end());	//drehen des Wortes
		invert += wort + delimiter;				//Speichern für Ausgabe
	}
	cout &lt;&lt; invert;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043672</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Sat, 02 Apr 2011 12:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Stringtransformation on Sat, 02 Apr 2011 14:37:53 GMT]]></title><description><![CDATA[<p>erstmal vielen dank für die wirklich schnelle bearbeitung meines problems.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a></p>
<p>die innere schleife:</p>
<pre><code class="language-cpp">for(k,j=i;k&lt;=i&amp;&amp;j!=' ';j--,k++)
</code></pre>
<p>k=0 :wurde lokal für die ganze main funktion initialisiert da der wert fortlaufend<br />
sein soll und nicht bei jedem schleifen aufruf wieder bei 0 beginnen darf da ja sonst das erste wort in invert jedesmal überschrieben wird oder?</p>
<p>j=i :der maximale index des gefunden wortes</p>
<p>;k&lt;=i :k, die laufvariable des invert strings, als abbruchbedingung an der oberen grenze des wortes.</p>
<p>und j!=' ' :als untere begrenzung des wortes.<br />
es fehlt natürlich die untere begrenzung des ersten wortes,<br />
das hab ich allerdings getestet und macht keinen unterschied<br />
im ergebnis</p>
<p>j--,k++ :naja rückwärts lesen, vorwärts schreiben ist ja soweit klar.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25179">@EOutOfResources</a><br />
n buchstaben dreher bei length. allerdings kommt auch dann ein<br />
&quot;out of range&quot; abbruch,kann aber nicht genau definieren wo er herkommt.<br />
die schweine quälen mich sowiso noch oft <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24205">@HighLigerBiMBam</a><br />
funktioniert auf jedenfall. wir haben allerdings bisher noch nicht mit der sstream bibliothek gearbeitet. hab mich nun aber ein wenig darüber schlau<br />
gemacht. sie ist ja mehr oder weniger für genau solche probleme da,<br />
&quot;wörter&quot; eines strings zu bearbeiten. daher hoff ich mal das das als lösung<br />
genügen sollte.</p>
<p>vielen dank auf jedenfall schonmal.<br />
und falls noch jemandem eine lösung ohne &lt;sstream&gt; einfällt würde ich das<br />
rein interesse halber gerne hören/lesen <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="🙂"
    /><br />
ansonstn einen schönen samstag</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043751</guid><dc:creator><![CDATA[rettich]]></dc:creator><pubDate>Sat, 02 Apr 2011 14:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Stringtransformation on Sat, 02 Apr 2011 16:18:34 GMT]]></title><description><![CDATA[<p>rettich schrieb:</p>
<blockquote>
<p>und falls noch jemandem eine lösung ohne &lt;sstream&gt; einfällt würde ich das<br />
rein interesse halber gerne hören/lesen <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>
</blockquote>
<p>Es gibt viele Möglichkeiten das umzusetzen.<br />
Ein weiteres Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;boost/foreach.hpp&gt;
int main() {
	typedef std::istream_iterator&lt;std::string&gt; strIter;
	strIter begin(std::cin), end;
	std::vector&lt;std::string&gt; vec(begin,end);
	BOOST_FOREACH(std::string&amp; word, vec) {
		std::reverse(word.begin(),word.end());
		std::cout&lt;&lt;word&lt;&lt;&quot; &quot;;
	}
	return 0;
}
</code></pre>
<p>Ausgabe:</p>
<pre><code>Ich esse gerne
Wurst
und Kaese
^Z
hcI esse enreg tsruW dnu eseaK
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2043777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043777</guid><dc:creator><![CDATA[inter2k3]]></dc:creator><pubDate>Sat, 02 Apr 2011 16:18:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Stringtransformation on Sat, 02 Apr 2011 17:49:14 GMT]]></title><description><![CDATA[<p>rettich schrieb:</p>
<blockquote>
<p>erstmal vielen dank für die wirklich schnelle bearbeitung meines problems.<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10318">@CStoll</a></p>
<p>die innere schleife:</p>
<pre><code class="language-cpp">for(k,j=i;k&lt;=i&amp;&amp;j!=' ';j--,k++)
</code></pre>
<p>k=0 :wurde lokal für die ganze main funktion initialisiert da der wert fortlaufend<br />
sein soll und nicht bei jedem schleifen aufruf wieder bei 0 beginnen darf da ja sonst das erste wort in invert jedesmal überschrieben wird oder?</p>
</blockquote>
<p>OK, das hatte ich übersehen. Aber wenn das so ist, kannst du es in der Schleifen-Initialisierung auch komplett weglassen.</p>
<blockquote>
<p>und j!=' ' :als untere begrenzung des wortes.<br />
es fehlt natürlich die untere begrenzung des ersten wortes,<br />
das hab ich allerdings getestet und macht keinen unterschied<br />
im ergebnis</p>
</blockquote>
<p>im übrigen Quelltext verwendest du j als Index in deinem Eingabestring, das solltest du an dieser Stelle auch machen, sprich <code>satz[j]!=' '</code> . Du vergleichst an der Stelle deinen Index mit dem ASCII-Code des Leerzeichens (auf den meisten Rechnern gleich 32), d.h. wenn das erste Wort der Eingabe nicht zufällig lang genug ist, liest du ziemlich schnell über den Anfang des Strings hinaus in Bereichen, in denen du nichts zu suchen hast. Aus dem selben Grund fehlt noch eine Abbruchbedingung j&gt;=0 in der Schleife - nur für den Fall, daß vor dem ersten Wort kein Leerzeichen steht.</p>
<p>Eine Lösung hätte ich auch noch:</p>
<pre><code class="language-cpp">size_t pos, end = 0;
do
{
  pos = satz.finde_first_not_of(' ', end);
  end = satz.find_first_of(' ', pos);
  string word = satz.substr(pos, end==string::npos ? string::npos : end-pos);
  reverse(word.begin(),word.end());
  cout&lt;&lt;word&lt;&lt;' ';// alternativ auch inverse += word + ' ';
while( end != string::npos );
</code></pre>
<p>(ohne Garantie - ich bin etwas aus der Übung)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2043818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2043818</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 02 Apr 2011 17:49:14 GMT</pubDate></item></channel></rss>