<?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[istream_iterator überspringt Leerzeichen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bastel gerade an einer Vigenère Verschlüsselung, und habe das Problem, dass der istream_iterator, mit dem ich die Zeichen lese, alle Leerzeichen auslässt.</p>
<p>Hier mal die relevanten Code Teile:</p>
<pre><code class="language-cpp">class Vigenere
{
public:
	Vigenere(const std::string&amp; k, bool e) : key(k), encrypt(e), kPos(0)
	{ }

	Vigenere(std::istream&amp; k, bool e) : encrypt(e), kPos(0)
	{
		k &gt;&gt; key;
	}

	char operator()(char ch)
	{
		char k = key[kPos]; 
		if (!std::isalpha(ch)) 
			return ch;

		kPos = (kPos + 1) % (key.length()); 

		char key = std::isupper(k) ? k - 'A' : k - 'a';
		char offset = std::isupper(ch) ? 'A' : 'a';
		char tmp = ch - offset;
		char result = encrypt ? tmp + key : tmp - key;
		if (result &lt; 0)
			result += 26;
		else
			result %= 26;
		return result + offset;
	}

private:
	std::string key; 
	int         kPos;              
	bool        encrypt;
};

void crypt::vigenere::crypt(std::istream &amp;text_in, std::istream &amp;key_in, std::ostream &amp;out, bool encrypt)
{
	std::istream_iterator&lt;char&gt; in_iter(text_in), in_end;
	std::ostream_iterator&lt;char&gt; out_iter(out);
	std::transform(in_iter, in_end, out_iter, Vigenere(key_in, encrypt)); 
}
</code></pre>
<p>Aufgerufen wird vigenere::crypt(...) entweder mit einem ifstream oder <em>cin</em> als text_in, das Problem besteht in beiden Fällen.</p>
<p>Ich bin mit einem Debugger durchgegangen, und Leerzeichen im Text kommen erst gar nicht beim Funktionsobjekt an.</p>
<p>Danke schonmal für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/215231/istream_iterator-überspringt-leerzeichen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 20:17:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/215231.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 08 Jun 2008 08:55:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to istream_iterator überspringt Leerzeichen on Sun, 08 Jun 2008 09:12:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bastel gerade an einer Vigenère Verschlüsselung, und habe das Problem, dass der istream_iterator, mit dem ich die Zeichen lese, alle Leerzeichen auslässt.</p>
<p>Hier mal die relevanten Code Teile:</p>
<pre><code class="language-cpp">class Vigenere
{
public:
	Vigenere(const std::string&amp; k, bool e) : key(k), encrypt(e), kPos(0)
	{ }

	Vigenere(std::istream&amp; k, bool e) : encrypt(e), kPos(0)
	{
		k &gt;&gt; key;
	}

	char operator()(char ch)
	{
		char k = key[kPos]; 
		if (!std::isalpha(ch)) 
			return ch;

		kPos = (kPos + 1) % (key.length()); 

		char key = std::isupper(k) ? k - 'A' : k - 'a';
		char offset = std::isupper(ch) ? 'A' : 'a';
		char tmp = ch - offset;
		char result = encrypt ? tmp + key : tmp - key;
		if (result &lt; 0)
			result += 26;
		else
			result %= 26;
		return result + offset;
	}

private:
	std::string key; 
	int         kPos;              
	bool        encrypt;
};

void crypt::vigenere::crypt(std::istream &amp;text_in, std::istream &amp;key_in, std::ostream &amp;out, bool encrypt)
{
	std::istream_iterator&lt;char&gt; in_iter(text_in), in_end;
	std::ostream_iterator&lt;char&gt; out_iter(out);
	std::transform(in_iter, in_end, out_iter, Vigenere(key_in, encrypt)); 
}
</code></pre>
<p>Aufgerufen wird vigenere::crypt(...) entweder mit einem ifstream oder <em>cin</em> als text_in, das Problem besteht in beiden Fällen.</p>
<p>Ich bin mit einem Debugger durchgegangen, und Leerzeichen im Text kommen erst gar nicht beim Funktionsobjekt an.</p>
<p>Danke schonmal für die Hilfe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1524983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524983</guid><dc:creator><![CDATA[DerKuchen]]></dc:creator><pubDate>Sun, 08 Jun 2008 09:12:28 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator überspringt Leerzeichen on Sun, 08 Jun 2008 09:12:00 GMT]]></title><description><![CDATA[<p>Habe es nicht getestet, aber AFAIR sollte sich Dein Problem erledigt haben, wenn Du auf 'istreambuf_iterator' umsteigst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1524989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524989</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 08 Jun 2008 09:12:00 GMT</pubDate></item><item><title><![CDATA[Reply to istream_iterator überspringt Leerzeichen on Sun, 08 Jun 2008 09:27:08 GMT]]></title><description><![CDATA[<p>Hat geklappt, vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1524997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1524997</guid><dc:creator><![CDATA[DerKuchen]]></dc:creator><pubDate>Sun, 08 Jun 2008 09:27:08 GMT</pubDate></item></channel></rss>