Szybkie wczytywanie pliku z stdin z podziałem na zmienne

0

Witam

W jaki sposób wczytywać z stdin kolejne linie w pętli rozdzielając każdą linię na 2 zmienne (separatorem jest spacja)

Umiem zrobić to ładując getline całą linię do stringa a potem wyszukując w nim pozycję spacji i czytam do spacji oraz przed spacją i rzutuję/konwertuję na odpowiednie typy.

Potrzebuję czegoś szybszego niż moje rozwiązanie więc wolałbym coś na scanf'ie który jest szybszy niż wszystkie moje operacje.

Przykładowe wejście:

-732 LRLRRRLLLR

Uzyskać chcę

int val = -732;
string letters = "LRLRRRLLLR";

Zamiast stringa może być też char*

Kombinuję tak (ale nie działa - nie wczytuje ciągu liter ze względu na spację):

int val;
char* letters;
while(!feof(stdin)) {
	sscanf(stdin, "%i %s", &val, &letters);
}
0
   while((ch=getchar())!=EOF)
     {
      if(ch=='-') negative=true;
      else if(isdigit(ch)) value=value*10+ch-'0';
      else if(ch=='L')
        {
         ...
        }
      else if(ch=='R')
        {
         ...
        }
      else if(ch=='\n')
        {
         ...
         ... =negative?-value:value;
         ...
        }
     }
0

Dzięki dragon.

Działa idealnie. Ogromny wzrost szybkości wykonania.
(generalnie nie napisałem, ze wczytywane jest tam 100000 takich linii z pliku w pętli)

Wrzucam gotowe rozwiązanie dla potomności.

    int val=0;
    string line="";
    char ch;
    bool negative=false;
    while((ch=getchar())!=EOF) {
        if(ch=='-') {
            negative=true;
        } else {
            if(isdigit(ch)) {
                val=val*10+ch-'0';
            } else {
                if(ch=='L' || ch=='R') {
                    line += ch;
                } else {
                    if(ch=='\n') {
                        val=negative?-val:val;
                        //tu wywołać funkcję/metodę operującą na bieżących wartościach zmiennych val i line
                        drzewo->addNode(val, line);
                        val=0;
                        line="";
                        negative=false;
                    }
                }
            }
        }
    }

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