Pobieranie linii z pliku - problem

0

Cześć, problem w internecie przewijał się wielokrotnie, przeważnie jako rozwiązanie jest sugerowanie zastosowanie f() getline.
Mam plik o takiej strukturze

typ nazwa cena

np.

a jakasnazwa 1
b innanazwa 3

standardowo można to rozwiązać przez wczytywanie w ten sposób
dane >> typ >> nazwa >> cena

niestety jeśli "nazwa" zawiera spacje to wszystkio się sypie i należy zastosować getline.
Niestety jakoś mnie to nie przekonuje bo co póxniej zrobić z tą linią wczytaną do jednego stringu?
"ciąć"?, jeśli tak to w jaki sposób

0

Jesli typ jest zawsze 1-literowy to string::substr() pomoze i dzielenie. Wczytujesz do tmp i dzielisz do docelowych danych,

0
#include <iostream>
#include <cstring>

using namespace std;

int main()
{
    char str[] = "a|jakas nazwa|1";
    char *pch1, *pch2, *pch3;
    
    pch1 = strtok(str,"|"); //pobierz typ
    pch2 = strtok(NULL,"|"); //pobierz nazwę
    pch3 = strtok(NULL,"|"); //pobierz cenę
    
    printf("Typ: %s \n", pch1);
    printf("Nazwa: %s \n", pch2);
    printf("Cena: %s \n", pch3);
    
    return 0;
}
2

Na szybko, więc kod nie jest zbyt piękny(musiałem się oderwać od konkretniejszych zadań :D)

int main()
{
	std::string str = "a jakieś coś 1";
	size_t firstSpace, lastSpace;

	firstSpace = str.find_first_of(" ");
	lastSpace = str.find_last_of(" ");

	std::string a, b, c;
	if(firstSpace != lastSpace && firstSpace != std::string::npos)
	{
		a = str.substr(0, firstSpace);
		b = str.substr(firstSpace + 1, lastSpace - a.length() - 1);
		c = str.substr(lastSpace + 1);
	}

	return 0;
}

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