Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] String i białe znaki // getline .

Ostatnio zmodyfikowano 2016-12-11 08:34
Autor Wiadomość
Squashu
Temat założony przez niniejszego użytkownika
[c++] String i białe znaki // getline .
» 2016-12-11 00:36:56
Witam,
natknąłem się na mały problem w jednym z prostszych zadań jakie mam zrobić:

Treść:

Detektyw Paul Drake, prowadząc przeszukanie w mieszkaniu zatrzymanego przemytnika, znalazł pod dywanem karteczkę zapisaną dziwnymi symbolami. Podejrzewa, że może to być zaszyfrowana wiadomość dotycząca miejsca przechowywania przemycanego towaru. Zamierza przekazać ją specjalistom od kryptologii, ale postanowił sam przeprowadzić wstępną analizę. Na początek potrzebuje informacji o liczbie liter oraz cyfr w poszczególnych liniach tekstu.

Wejście

Pierwsza linia wejścia zawiera liczbę naturalną n (1<=n<=10), mówiącą, ile linii tekstu znajduje się na znalezionej karteczce. Następnie podane są kolejno te linie. Każda z nich może zawierać małe i duże litery alfabetu angielskiego, cyfry, znaki interpunkcyjne oraz spacje. Długość każdej linii wynosi co najmniej 1 i co najwyżej 30 znaków.

Wyjście

Dla każdej linii tekstu wypisz oddzielone spacjami trzy liczby, oznaczające kolejno liczbę wszystkich znaków w tej linii (wraz z spacjami), liczbę zawartych w niej liter oraz liczbę cyfr.

C/C++
#include <iostream>

int main() {
    int a, leng, x, y;
    std::cin >> a;
    std::cin.sync();
    std::string wyraz;
    for( int i = 0; i < a; i++ ) {
        std::getline( std::cin, wyraz );
        leng = wyraz.length();
        x = y = 0;
        for( int j = 0; j < leng; j++ ) {
            if(( wyraz[ j ] >= '0' ) &&( wyraz[ j ] <= '9' ) ) {
                y++;
            } else if((( wyraz[ j ] >= 'a' ) &&( wyraz[ j ] <= 'z' ) ) ||(( wyraz[ j ] >= 'A' ) &&( wyraz[ j ] <= 'Z' ) ) ) {
                x++;
            }
        }
        std::cout << leng << " " << x << " " << y << std::endl;
    }
    return 0;
}

Zadbałem o czyszczenie bufora; użyłem getlina, żeby string "zbierał" białe znaki. Chciałbym zrozumieć, gdzie popełniłem błąd. Prosiłbym jedynie o wskazanie gdzie tkwi problem, kod chciałbym poprawić sam. Dziękuje za pomoc.
P-154761
mateczek
» 2016-12-11 06:56:58
jeśli to jest zadanie na sprawdzarkę automatyczną to nie czyścisz strumienia. Skoro napisane jest, że w pierwszej Lini jest cyfra to znaczy że jest!!! jedynie po pobraniu liczby użyć cin.ignore() lub coś podobnego by pozbyć się znaku końca linii
P-154764
Squashu
Temat założony przez niniejszego użytkownika
» 2016-12-11 08:34:44
Faktycznie.... Strasznie głupi błąd, że też tego wcześniej nie zauważyłem. Już poprawione, wszystko działa. Dzięki, zamykam temat.
P-154765
« 1 »
  Strona 1 z 1