<?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[Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Ich versuche folgendes Beispiel zu lösen:<br />
Lesen Sie maximal 50 Zeichenketten ein (jede Zeichenkette hat maximal 80 Zeichen, Abschluß durch Eingabe von &quot;Stop&quot;) sowie einen Wert n. Geben Sie dann alle Zeichenketten ein, die maximal n Zeichen lang sind. Die Verwendung von Stringfunktionen (strlen etc.) ist nicht gestattet.<br />
Anmerkung: Beachten Sie, dass beim Einlesen eine Zeichenkette durch ein Leerzeichen beendet wird. z.B.</p>
<p>Eingabe: C++ ist ganz schön kompliziert so im Allgemeinen Stop n=4<br />
Ausgabe: C++ ist ganz so im</p>
<p>Mir bereitet die Abbruchbedingung mit STOP Probleme.<br />
Mein Ansatz sieht bisher so aus:</p>
<pre><code>char zeichenketten[50][81];
    char abbruch[5] = {&quot;STOP&quot;};

    cout &lt;&lt; &quot;Eingabe Zeichenketten: &quot; &lt;&lt; endl;

    for(int i = 0; i &lt; 50; ++i){
        for(int j = 0; zeichenketten[i][j] != '\0' &amp;&amp; j &lt; 81; j++){
            for(int k = 0; k &lt; 5; ++k){

               if(zeichenketten[i][k] == abbruch[k]){
                       i = 50;
                       j = 81;
                       break;
                   }

            }

            cin &gt;&gt; zeichenketten[i][j];
        }

    }
</code></pre>
<p>Wenn ich meinen Beispielssatz einlese, hätte ich gerne<br />
i = 0 j= erstesWort<br />
i = 1 j=zweitesWort<br />
...</p>
<p>Leider funktioniert das so nicht.<br />
Vielleicht kann mir jemand verraten was ich falsch mache oder mir einen kleinen Tipp geben.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/328954/zeichenkette-mit-abbruch-von-quot-stop-quot-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 07 Jul 2026 04:25:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/328954.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Nov 2014 20:07:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sat, 01 Nov 2014 20:07:56 GMT]]></title><description><![CDATA[<p>Guten Abend!</p>
<p>Ich versuche folgendes Beispiel zu lösen:<br />
Lesen Sie maximal 50 Zeichenketten ein (jede Zeichenkette hat maximal 80 Zeichen, Abschluß durch Eingabe von &quot;Stop&quot;) sowie einen Wert n. Geben Sie dann alle Zeichenketten ein, die maximal n Zeichen lang sind. Die Verwendung von Stringfunktionen (strlen etc.) ist nicht gestattet.<br />
Anmerkung: Beachten Sie, dass beim Einlesen eine Zeichenkette durch ein Leerzeichen beendet wird. z.B.</p>
<p>Eingabe: C++ ist ganz schön kompliziert so im Allgemeinen Stop n=4<br />
Ausgabe: C++ ist ganz so im</p>
<p>Mir bereitet die Abbruchbedingung mit STOP Probleme.<br />
Mein Ansatz sieht bisher so aus:</p>
<pre><code>char zeichenketten[50][81];
    char abbruch[5] = {&quot;STOP&quot;};

    cout &lt;&lt; &quot;Eingabe Zeichenketten: &quot; &lt;&lt; endl;

    for(int i = 0; i &lt; 50; ++i){
        for(int j = 0; zeichenketten[i][j] != '\0' &amp;&amp; j &lt; 81; j++){
            for(int k = 0; k &lt; 5; ++k){

               if(zeichenketten[i][k] == abbruch[k]){
                       i = 50;
                       j = 81;
                       break;
                   }

            }

            cin &gt;&gt; zeichenketten[i][j];
        }

    }
</code></pre>
<p>Wenn ich meinen Beispielssatz einlese, hätte ich gerne<br />
i = 0 j= erstesWort<br />
i = 1 j=zweitesWort<br />
...</p>
<p>Leider funktioniert das so nicht.<br />
Vielleicht kann mir jemand verraten was ich falsch mache oder mir einen kleinen Tipp geben.</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425327</guid><dc:creator><![CDATA[estrella]]></dc:creator><pubDate>Sat, 01 Nov 2014 20:07:56 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sat, 01 Nov 2014 20:24:49 GMT]]></title><description><![CDATA[<p>Man kann C-Strings nicht per <code>==</code> vergleichen. Das ginge mit <code>std::strcmp()</code> . Da du aber ja keine fertigen Stringfunktionen verwenden darst, musst du dir entweder deine eigene Vergleichsfunktion schreiben, oder im <code>if</code> wirklich jedes der fünf Zeichen vergleichen.<br />
Wieso ließt du eigentlich Zeichenweise von <code>cin</code> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425331</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sat, 01 Nov 2014 20:24:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sat, 01 Nov 2014 20:31:43 GMT]]></title><description><![CDATA[<p>Wieso ließt du eigentlich Zeichenweise von cin?</p>
<p>Wenn ich nicht zeichenweise mit cin einlesen möchte, wie könnte ich es den dann machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425333</guid><dc:creator><![CDATA[estrella]]></dc:creator><pubDate>Sat, 01 Nov 2014 20:31:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sat, 01 Nov 2014 20:59:19 GMT]]></title><description><![CDATA[<p>Vielleicht sollte ich mein Problem etwas visualisieren, um es besser verständlich zu machen.</p>
<p>wenn ich</p>
<pre><code>cout &lt;&lt; &quot;i &quot; &lt;&lt; i &lt;&lt; &quot;j &quot; &lt;&lt; j  &lt;&lt; &quot; &quot; &lt;&lt; zeichenketten[i][j] &lt;&lt; endl;
</code></pre>
<p>bei der Eingabe meiner Testzeile<br />
C++ ist ganz schön kompliziert so im Allgemeinen Stop<br />
eingebe, erhalte ich</p>
<p>Eingabe Zeichenketten:<br />
C++ ist ganz schön kompliziert so im Allgemeinen STOP<br />
i 0j 0 C<br />
i 0j 1 +<br />
i 0j 2 +<br />
i 0j 3 i<br />
i 0j 4 s<br />
i 0j 5 t</p>
<p>i 1j 0 g<br />
i 1j 1 a<br />
i 1j 2 n<br />
i 1j 3 z<br />
i 1j 4 s</p>
<p>i 50j 81 c</p>
<p>Program ended with exit code: 0</p>
<p>Jedoch hätte ich gerne, dass sich nach jedem Leerzeichen i um eins erhöht und erst durch die Eingabe von STOP abbricht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425335</guid><dc:creator><![CDATA[estrella]]></dc:creator><pubDate>Sat, 01 Nov 2014 20:59:19 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sun, 02 Nov 2014 03:16:16 GMT]]></title><description><![CDATA[<p>estrella schrieb:</p>
<blockquote>
<p>Eingabe Zeichenketten:<br />
C++ ist ganz schön kompliziert so im Allgemeinen STOP</p>
<p>[...]</p>
<p>Program ended with exit code: 0</p>
</blockquote>
<p>Ähm ... nein? Der von Dir im Eröffnungspost gezeigte Code zeigt sicher nicht das von dir jetzt beschriebene Verhalten.</p>
<p>estrella (sinngemäß) schrieb:</p>
<blockquote>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int main()
{
	char zeichenketten[50][81];  // &lt;-- uninitialisiert. Da steht jetzt irgendein Muell drin.
	char abbruch[ /* 5 &lt;-- brauchst du nicht angeben, wenn du eh initialisierst */ ] = &quot;STOP&quot;;

	cout &lt;&lt; &quot;Eingabe Zeichenketten: &quot; &lt;&lt; endl;

	for (int i = 0; i &lt; 50; ++i) {  // &lt;-- gut, maximal in zeichenketten[0...50] einlesen.

		for (int j = 0; zeichenketten[i][j] != '\0' &amp;&amp; j &lt; 81; j++) {  // &lt;-- aehm. siehe unten 1)
			
			for (int k = 0; k &lt; 5; ++k) {                 // --+ 
				if (zeichenketten[i][k] == abbruch[k]) {  //   |
					i = 50;                               //   +- lass' ich jetzt mal aus 3)
					j = 81;                               //   |
					break;                                // --+
				}
			}

			cin &gt;&gt; zeichenketten[i][j];  // &lt;-- Wirklich? 2)
		}
	}
}
</code></pre>
</blockquote>
<ol>
<li>
<p><code>for (int j = 0; zeichenketten[i][j] != '\0' &amp;&amp; j &lt; 81; j++)</code><br />
Warum brauchst du zum wortweisen (&quot;Beachten Sie, dass beim Einlesen eine Zeichenkette durch ein Leerzeichen beendet wird.&quot;) Einlesen eine Schleife von <code>0...80</code> ? Weiters verwendest du ein uninitialisiertes <code>zeichenketten[i][j]</code> in der Bedingung. Aber du brauchst diese Schleife sowieso nicht.</p>
</li>
<li>
<p><code>cin &gt;&gt; zeichenketten[i][j]</code><br />
Damit ließt Du ein Zeichen nach <code>zeichenketten[i][j]</code> . Wenn du <code>&quot;C++ ist [...][Enter]&quot;</code> eingibst,<br />
landet das <code>'C'</code> in <code>zeichenketten[0][0]</code> . Der Rest ( <code>&quot;++ ist [...][Enter]&quot;</code> ) bleibt im Eingabepuffer.<br />
<code>j=1</code> : <code>'+'</code> landet in <code>zeichenketten[0][1]</code> . Der Rest ( <code>&quot;+ ist [...][Enter]&quot;</code> ) bleibt im Eingabepuffer.<br />
<code>j=2</code> : <code>'+'</code> landet in <code>zeichenketten[0][2]</code> . Der Rest ( <code>&quot; ist [...][Enter]&quot;</code> ) bleibt im Eingabepuffer.<br />
<code>j=3</code> : <code>' '</code> landet in <code>zeichenketten[0][3]</code> . Der Rest ( <code>&quot;ist [...][Enter]&quot;</code> ) bleibt im Eingabepuffer.<br />
<code>j=4</code> : <code>'i'</code> landet in <code>zeichenketten[0][4]</code> . Der Rest ( <code>&quot;st [...][Enter]&quot;</code> ) bleibt im Eingabepuffer.<br />
<code>j=5</code> : <code>'s'</code> landet in <code>zeichenketten[0][5]</code> . Der Rest ( <code>&quot;t [...][Enter]&quot;</code> ) bleibt im Eingabepuffer.<br />
<code>j=6</code> : <code>'t'</code> landet in <code>zeichenketten[0][6]</code> . Der Rest ( <code>&quot; [...][Enter]&quot;</code> ) bleibt im Eingabepuffer.</p>
</li>
</ol>
<p>... aber Moment mal, nach <code>&quot;C++&quot;</code> sollte die erste Zeichenkette <code>zeichenketten[0]</code> doch schon zu Ende sein (Leerzeichen) und das <code>&quot;ist&quot;</code> in <code>zeichenketten[1]</code> landen!? So wird das also nichts.</p>
<p>Vergiss mal das Array aus 50 Zeichenketten für je maximal 80 Zeichen ... wie liest man denn ein Wort in ein <code>char</code> -Array? Genau:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
	char wort[ 81 ];
	std::cin &gt;&gt; wort;

	// Ausgabe zur Prüfung:
	std::cout &lt;&lt; '\&quot;' &lt;&lt; wort &lt;&lt; &quot;\&quot;\n&quot;;
}
</code></pre>
<p>Konsole:</p>
<pre><code>C++[Enter]
&quot;C++&quot;
</code></pre>
<p>Yeah, funktioniert! So, jetzt mit drei Wörtern:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
	char wort1[ 81 ];
	std::cin &gt;&gt; wort1;

	char wort2[ 81 ];
	std::cin &gt;&gt; wort2;

	char wort3[ 81 ];
	std::cin &gt;&gt; wort3;

	// Ausgabe zur Prüfung:
	std::cout &lt;&lt; '\&quot;' &lt;&lt; wort1 &lt;&lt; &quot;\&quot;\n&quot;;
	std::cout &lt;&lt; '\&quot;' &lt;&lt; wort2 &lt;&lt; &quot;\&quot;\n&quot;;
	std::cout &lt;&lt; '\&quot;' &lt;&lt; wort3 &lt;&lt; &quot;\&quot;\n&quot;;
}
</code></pre>
<p>Konsole:</p>
<pre><code>C++ ist ganz[Enter]
&quot;C++&quot;
&quot;ist&quot;
&quot;ganz&quot;
</code></pre>
<p>Yeah, funktioniert auch! So, jetzt mit einem Array für drei Wörter:</p>
<pre><code class="language-cpp">#include &lt;cstddef&gt;
#include &lt;iostream&gt;

int main()
{
	char wort[ 3 ][ 81 ];

	for( std::size_t i = 0; i &lt; 3; ++i )
		std::cin &gt;&gt; wort[ i ];

	// Ausgabe zur Prüfung:
	for( std::size_t i = 0; i &lt; 3; ++i )
		std::cout &lt;&lt; '\&quot;' &lt;&lt; wort[ i ] &lt;&lt; &quot;\&quot;\n&quot;;
}
</code></pre>
<p>Konsole:</p>
<pre><code>C++ ist ganz[Enter]
&quot;C++&quot;
&quot;ist&quot;
&quot;ganz&quot;
</code></pre>
<p>Aaah, so funktioniert das also <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<ol start="3">
<li>Prüfen auf &quot;STOP&quot;<br />
Wenn du keine fertigen Stringfunktionen verwenden darfst, dann wird es wohl das einfachste sein, einfach alle Zeichen in einem <code>if</code> zu prüfen.</li>
</ol>
<p>Zusammengesetzt:</p>
<pre><code class="language-cpp">#include &lt;cstddef&gt;
#include &lt;iostream&gt;

int main()
{
	char zeichenketten[ 50 ][ 81 ];
	std::size_t anzahl;

	for( anzahl = 0; anzahl &lt; 50; ++anzahl ) {

		std::cin &gt;&gt; zeichenketten[ anzahl ];

		if( zeichenketten[ anzahl ][ 0 ] == 'S' &amp;&amp;
		    zeichenketten[ anzahl ][ 1 ] == 'T' &amp;&amp;
		    zeichenketten[ anzahl ][ 2 ] == 'O' &amp;&amp;
		    zeichenketten[ anzahl ][ 3 ] == 'P' &amp;&amp;
		    zeichenketten[ anzahl ][ 4 ] == '\0' )
		{
			break;  // for-Schleife abbrechen.
		}
	}

	// Ausgabe zur Prüfung:
	for( std::size_t i = 0; i &lt; anzahl; ++i ) {

		std::cout &lt;&lt; &quot;Wort &quot; &lt;&lt; i + 1 &lt;&lt; &quot;: \&quot;&quot; &lt;&lt; zeichenketten[ i ] &lt;&lt; &quot;\&quot;\n&quot;;
	}
}
</code></pre>
<p>Konsole:</p>
<pre><code>C++ ist ganz schön kompliziert so im Allgemeinen STOP[Enter]
Wort 1: &quot;C++&quot;
Wort 2: &quot;ist&quot;
Wort 3: &quot;ganz&quot;
Wort 4: &quot;schön&quot;
Wort 5: &quot;kompliziert&quot;
Wort 6: &quot;so&quot;
Wort 7: &quot;im&quot;
Wort 8: &quot;Allgemeinen&quot;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2425369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425369</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 02 Nov 2014 03:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sun, 02 Nov 2014 10:39:32 GMT]]></title><description><![CDATA[<p>Vielen lieben Dank für deine verständliche Erklärung und wunderbare Unterstützung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425392</guid><dc:creator><![CDATA[estrella]]></dc:creator><pubDate>Sun, 02 Nov 2014 10:39:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sun, 02 Nov 2014 11:04:07 GMT]]></title><description><![CDATA[<p>Kein Problem. Jetzt wirds eh nochmal spannend mit dem <code>&quot;n=sonstwas&quot;</code> . <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425393</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 02 Nov 2014 11:04:07 GMT</pubDate></item><item><title><![CDATA[Reply to Zeichenkette mit Abbruch von &amp;quot;STOP&amp;quot; einlesen on Sun, 02 Nov 2014 11:08:01 GMT]]></title><description><![CDATA[<p>Es sollte allerdings noch ein Overflow vermieden werden:</p>
<pre><code>std::cin &gt;&gt; std::setw(81) &gt;&gt; zeichenketten[anzahl];
</code></pre>
<p>(Header iomanip einbinden)<br />
Das sorgt dafür, dass maximal 80 Zeichen eingelesen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2425394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2425394</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sun, 02 Nov 2014 11:08:01 GMT</pubDate></item></channel></rss>