Pobieranie z klawiatury ciągu znaków, aż do wciśnięcia kropki i entera.

0

Witam uprzejmie,
Obecnie piszę prosty program mający pobrać z klawiatury ciąg znaków, aż do momentu wciśnięcia kropki i entera, a później wykonać na znakach odpowiednie operacje. Tą drugą część mam w pełni zrobioną, ale nadal kombinuję jak wprowadzić odpowiedni input..

W moim obecnym kodzie numer ileśtam istnieją dwa problemy: ciąg jest pobierany do pierwszego entera (niezależnie od tego czy przed nim stała kropka) oraz ciąg jest zapisywany do pierwszej kropki. Reszta tekstu jest ignorowana. Widzę te błędy, ale nie mam pojęcia jak je naprawić.

	while (input != 46 && cin.peek() != '\0'){
		input = cin.get();
		text += (char)input;
		tmp = cin.peek();
	} cout << "\n" << text << endl;

Miałby ktoś pomysł jak to rozwiązać? Zależy mi na szybkości.
Z góry dzięki.

1

Po prostu pobieraj string jako linię (czyli do momentu wciśnięcia <enter>). Wtedy sprawdź czy ostatnim znakiem linii nie była kropka :-) Jeśli nie, to pobieraj linię dalej łącząc ją z poprzednio pobraną zawartością. Zwykłe while(... };

#include <iostream>
#include <string>

std::string getData() {
    std::string lineSum;
    std::string line;
    while(getline(std::cin, line) && line.back() != '.') {
        if(lineSum.size()) lineSum += std::string(1, '\n');
        lineSum += line;
    }
    return lineSum + std::string(1, '\n') + line;
}

int main() {
    auto data = getData();
    std::cout << "data: |" << data << "|" << std::endl;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1