Jak sparsować string?

Jak sparsować string?
FV
  • Rejestracja:około 6 lat
  • Ostatnio:3 miesiące
  • Postów:96
0

Potrzebuję taką funkcjonalność:

Kopiuj
#include <stdio.h>
#include <iostream>
#include <string>

int main ()
{
  char sentence []="{ 42, LE_CUP, 1 }";
  char s[20];
  int i;
  int j;

  sscanf (sentence,"{ %d, %s, %d }",&i,s,&j);
  std::cout << i << std::endl;
  std::cout << s << std::endl;
  std::cout << j << std::endl;
  return 0;
}

Ale mi to nie działą bo output jest:

Kopiuj
42
LE_CUP,
0

zamiast

Kopiuj
42
LE_CUP
1

Może jakimś forem szukając białego znaku i przecinka?

edytowany 2x, ostatnio: Riddle
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 17 godzin
  • Postów:1607
3

Zamiast kazać czytać do białego znaku %s, możesz kazać czytać do przecinka %[^,]:

Kopiuj
#include <stdio.h>
#include <iostream>
#include <string>

int main ()
{
  char sentence []="{ 42, LE_CUP, 1 }";
  char s[20];
  int i;
  int j;

  sscanf (sentence,"{ %d, %[^,], %d }",&i,s,&j);
  std::cout << i << std::endl;
  std::cout << s << std::endl;
  std::cout << j << std::endl;
  return 0;
}

Wynik:

Kopiuj
42
LE_CUP
1
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około 2 miesiące
  • Postów:3561
1

Co do "sparsować" ... o ile pozostaniesz w podobnym zakresie złożoności, sscanf można uznać za "parsowanie"
Ale wymięknie jak złożoność pojedzie w górę.

C++ ma znaczne możliości tworzenia ładnych, czytelnych parserów, od ambitnego C++ boost:spirit (ośmieliłbym się dla mniejszych rzeczy,. wyrażeń) po np AntLR (dowolnie duże, i zachowuje elegancję, debugoalnosc)
Dałem to zdanie bo (efektywnie) używasz C - i ujawniasz że standardowe C++ ma słabość w tych zagadnieniach :)


Bo C to najlepszy język, każdy uczeń ci to powie
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
1

Jeden przykład wejścia nie pozwala stwierdzić jaka powinna być gramatyka wejścia.
Przydało by się pełne wyjaśnienie jakie jest możliwe wejście. Czy to LE_CUP to jest wyjątek, czy reguła? Może wystąpić na każdej pozycji, czy tylko an drugie? Czy na drugiej pozycji może być cos co nie jest tekstem, ale liczby.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.