istream_iterator überspringt Leerzeichen
-
Hallo,
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.
Hier mal die relevanten Code Teile:
class Vigenere { public: Vigenere(const std::string& k, bool e) : key(k), encrypt(e), kPos(0) { } Vigenere(std::istream& k, bool e) : encrypt(e), kPos(0) { k >> 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 < 0) result += 26; else result %= 26; return result + offset; } private: std::string key; int kPos; bool encrypt; }; void crypt::vigenere::crypt(std::istream &text_in, std::istream &key_in, std::ostream &out, bool encrypt) { std::istream_iterator<char> in_iter(text_in), in_end; std::ostream_iterator<char> out_iter(out); std::transform(in_iter, in_end, out_iter, Vigenere(key_in, encrypt)); }Aufgerufen wird vigenere::crypt(...) entweder mit einem ifstream oder cin als text_in, das Problem besteht in beiden Fällen.
Ich bin mit einem Debugger durchgegangen, und Leerzeichen im Text kommen erst gar nicht beim Funktionsobjekt an.
Danke schonmal für die Hilfe.
-
Habe es nicht getestet, aber AFAIR sollte sich Dein Problem erledigt haben, wenn Du auf 'istreambuf_iterator' umsteigst.
-
Hat geklappt, vielen Dank!