<?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[distance(istream_iterator&amp;lt;Word&amp;gt; in(cin), istream_iterator&amp;lt;Word&amp;gt; eof) funktioniert nicht]]></title><description><![CDATA[<p>Hallo, wer kann mir helfen. Ich möchte die Variante 3 (im Listing: main.cpp) zum Laufen bringen. Ich find den Fehler leider einfach nicht. Irgendwie bleibt das Programm in einer Endlosschleife hängen, Abbruch mit Control-Z (wie vorgesehen) geht nicht.</p>
<p>Die Variante 1 funktioniert..</p>
<p>Natürlich könnte die Methode read() auch anders aussehen. Ich würde jedoch gerne meine Lösung mit den Iteratoren verwenden.</p>
<p>Vielen Dank bereits jetzt! Grüsse aus der Schweiz, Thomas</p>
<p><strong>main.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

#include &lt;vector&gt;

#include &quot;Word.h&quot;

using namespace std;

int main() {

	// Variante 1: funktioniert
	// ========================

	Word word1, word2, word3;
	cin &gt;&gt; word1 &gt;&gt; word2 &gt;&gt; word3;
	cout &lt;&lt; word1 &lt;&lt; word2 &lt;&lt; word3;

	// Variante 2: funktioniert nicht
	// ==============================
	// 
	// vector&lt;Word&gt; v;
	// istream_iterator&lt;Word&gt; eof;
	// for (istream_iterator&lt;Word&gt; it(cin); (it != eof); ++it) {
	//   v.push_back(*it);
	// }
	// 
	// cout &lt;&lt; distance(v.begin(), v.end()) &lt;&lt; endl;

	// Variante 3: funktioniert nicht
	// ==============================
	//
	// istream_iterator&lt;Word&gt; eof;
	// cout &lt;&lt; distance(istream_iterator&lt;Word&gt;(cin), eof) &lt;&lt; endl;

	return 0;
}
</code></pre>
<p><strong>Word.h</strong></p>
<pre><code class="language-cpp">#ifndef WORD_H_
#define WORD_H_

#include &lt;string&gt;
#include &lt;iostream&gt;

using std::string;

class Word {
	private:
		string word;
	public:
		Word();
		Word(string w);
		void read(std::istream&amp;);
		friend std::istream&amp; operator&gt;&gt;(std::istream&amp;, Word&amp;);
		friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Word&amp;);
};

#endif /*WORD_H_*/
</code></pre>
<p><strong>Word.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;cctype&gt;
#include &lt;iterator&gt;

#include &quot;Word.h&quot;

using namespace std;

Word::Word() : word(&quot;&quot;) {}

Word::Word(string w) : word(w) {}

void Word::read(istream&amp; in) {

	istreambuf_iterator&lt;char&gt; it(in);

	while(!isalpha(*it)) it++;

	while(isalpha(*it)) {
		word.push_back(*(it++));
	}

}

istream&amp; operator&gt;&gt;(istream&amp; input, Word&amp; word) {
	word.read(input);
	return input;
}

ostream&amp; operator&lt;&lt;(ostream&amp; output, Word&amp; word) {
	output &lt;&lt; word &lt;&lt; endl;
	return output;
}
</code></pre>
<p>//Post in den reg nick gepackt und den unreg post gelöscht. <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/topic/147132/distance-istream_iterator-lt-word-gt-in-cin-istream_iterator-lt-word-gt-eof-funktioniert-nicht</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 03:51:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/147132.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 May 2006 12:35:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to distance(istream_iterator&amp;lt;Word&amp;gt; in(cin), istream_iterator&amp;lt;Word&amp;gt; eof) funktioniert nicht on Sun, 14 May 2006 16:50:58 GMT]]></title><description><![CDATA[<p>Hallo, wer kann mir helfen. Ich möchte die Variante 3 (im Listing: main.cpp) zum Laufen bringen. Ich find den Fehler leider einfach nicht. Irgendwie bleibt das Programm in einer Endlosschleife hängen, Abbruch mit Control-Z (wie vorgesehen) geht nicht.</p>
<p>Die Variante 1 funktioniert..</p>
<p>Natürlich könnte die Methode read() auch anders aussehen. Ich würde jedoch gerne meine Lösung mit den Iteratoren verwenden.</p>
<p>Vielen Dank bereits jetzt! Grüsse aus der Schweiz, Thomas</p>
<p><strong>main.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;algorithm&gt;

#include &lt;vector&gt;

#include &quot;Word.h&quot;

using namespace std;

int main() {

	// Variante 1: funktioniert
	// ========================

	Word word1, word2, word3;
	cin &gt;&gt; word1 &gt;&gt; word2 &gt;&gt; word3;
	cout &lt;&lt; word1 &lt;&lt; word2 &lt;&lt; word3;

	// Variante 2: funktioniert nicht
	// ==============================
	// 
	// vector&lt;Word&gt; v;
	// istream_iterator&lt;Word&gt; eof;
	// for (istream_iterator&lt;Word&gt; it(cin); (it != eof); ++it) {
	//   v.push_back(*it);
	// }
	// 
	// cout &lt;&lt; distance(v.begin(), v.end()) &lt;&lt; endl;

	// Variante 3: funktioniert nicht
	// ==============================
	//
	// istream_iterator&lt;Word&gt; eof;
	// cout &lt;&lt; distance(istream_iterator&lt;Word&gt;(cin), eof) &lt;&lt; endl;

	return 0;
}
</code></pre>
<p><strong>Word.h</strong></p>
<pre><code class="language-cpp">#ifndef WORD_H_
#define WORD_H_

#include &lt;string&gt;
#include &lt;iostream&gt;

using std::string;

class Word {
	private:
		string word;
	public:
		Word();
		Word(string w);
		void read(std::istream&amp;);
		friend std::istream&amp; operator&gt;&gt;(std::istream&amp;, Word&amp;);
		friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, Word&amp;);
};

#endif /*WORD_H_*/
</code></pre>
<p><strong>Word.cpp</strong></p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;cctype&gt;
#include &lt;iterator&gt;

#include &quot;Word.h&quot;

using namespace std;

Word::Word() : word(&quot;&quot;) {}

Word::Word(string w) : word(w) {}

void Word::read(istream&amp; in) {

	istreambuf_iterator&lt;char&gt; it(in);

	while(!isalpha(*it)) it++;

	while(isalpha(*it)) {
		word.push_back(*(it++));
	}

}

istream&amp; operator&gt;&gt;(istream&amp; input, Word&amp; word) {
	word.read(input);
	return input;
}

ostream&amp; operator&lt;&lt;(ostream&amp; output, Word&amp; word) {
	output &lt;&lt; word &lt;&lt; endl;
	return output;
}
</code></pre>
<p>//Post in den reg nick gepackt und den unreg post gelöscht. <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/1057536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057536</guid><dc:creator><![CDATA[Zubi81]]></dc:creator><pubDate>Sun, 14 May 2006 16:50:58 GMT</pubDate></item><item><title><![CDATA[Reply to distance(istream_iterator&amp;lt;Word&amp;gt; in(cin), istream_iterator&amp;lt;Word&amp;gt; eof) funktioniert nicht on Sun, 14 May 2006 17:41:10 GMT]]></title><description><![CDATA[<p>Ich dachte gerade ich hätte es... leider doch nicht. <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="😞"
    /><br />
Wer kann mir helfen?</p>
<pre><code class="language-cpp">void Word::read(istream&amp; in) {

	istreambuf_iterator&lt;char&gt; it(in);
	istreambuf_iterator&lt;char&gt; eof;

	while(!isalpha(*it)) 
		it++;

	while(isalpha(*it) &amp;&amp; (it != eof)) {
		word.push_back(*(it++));
	}

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1057676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1057676</guid><dc:creator><![CDATA[Zubi81]]></dc:creator><pubDate>Sun, 14 May 2006 17:41:10 GMT</pubDate></item></channel></rss>