zielonek12 Temat założony przez niniejszego użytkownika |
Operacja na stringu » 2013-10-23 16:58:34 Witam, tworząc sobie quiz konsolowy postanowiłem, że pytania będą ładowane z pliku. Każde pytanie(z odpowiedziami) to jeden wers w pliku. Wygląda to tak: nr=pytanie=odp1=odp2=odp3=odp4 Odpowiedź 4 zawsze jest prawidłowa, np: 1=Co jest stolicą Polski=Kraków=Lublin=Gdańsk=Warszawa Mój kłopot polega na tym, że nie bardzo wiem jak po pobraniu całej lini(getline) teraz powycinać odpowiednie fragmenty. Myślałem sobie początkowo, że podczas operacji nad daną linią będę wycinał dane od znaku równa się do znaku równa się... lecz niestety nawet nie wiem jak się za to zabrać, co użyć? Pokusiłbym się na sscanf'a ale w sumie usiłuje działać w c++(a sscanf jest z C?). Proszę o porady, w c++ działam od całych trzech dni :)
@Używam klasy string. |
|
Wasilek |
» 2013-10-23 17:10:54 Pętla o ilości obrotów równym ilości znaków w stringu (jest na to funkcja) i sprawdzanie czy sprawdzany aktualnie znak jest '=' jeżeli tak to wszystkie poprzednie znaki wpisz do odpowiedniej zmiennej (np. "pytanie") i następnie skasuj wszystkie znaki razem z '=' i powtórz to 5 razy (bo 5 wycinków chcesz mieć) |
|
zielonek12 Temat założony przez niniejszego użytkownika |
» 2013-10-23 17:17:18 Dzięki wielkie, pamiętasz może jak nazywa się funkcja na długość stringu? Bo do klasy string nie nada się strlen()? |
|
Wasilek |
» 2013-10-23 17:22:19 |
|
zielonek12 Temat założony przez niniejszego użytkownika |
» 2013-10-23 17:30:00 Dziękować. |
|
zielonek12 Temat założony przez niniejszego użytkownika |
» 2013-10-23 20:21:09 for( int i = 0; i < zawartosc.size(); i++ ) { if( zawartosc[ i ] == '=' ) { } } @Próbowałem do tego jeszcze jedną pętle ale wydaje mi się to niezbyt optymalne. @edit: Ostatnia próba: for( int i = 0; i < zawartosc.size(); i++ ) { if( zawartosc[ i ] == '=' ) { for( int t = i; t < zawartosc.size(); t++ ) { if( zawartosc[ t ] == '=' ) pyt + zawartosc[ i ]; } } } Ale niestety lipa. |
|
pekfos |
» 2013-10-23 20:35:05 substr() i erase()? wydaje mi się to niezbyt optymalne. |
Jakie to ma znaczenie, skoro nie potrafisz tego zrealizować w inny sposób? Rób jak umiesz. Dla małych porcji danych wszystko działa dostatecznie szybko. |
|
zielonek12 Temat założony przez niniejszego użytkownika |
» 2013-10-23 21:40:31 Dzięki, substr() bardzo się przydało. Niby sobie to ogarnąłem(kod pewnie strasznie amatorski, ale zacząć jakoś trzeba) lecz i tak mam kłopoty. Proszę o pomoc troszkę... wrzucam funkcje, która losuje pytanie, wczytuje je z pliku i teoretycznie podstawowy ciąg znaków dzieli na 4 odpowiedzi i pytanie. void Game() { fstream file; bool good(); file.open( "pyt.txt" ); string zawartosc; int t = 0; string test; int pytanie =(( rand() %( liczba - 1 ) ) + 1 ); cout << endl << "Wylosowalem: " << pytanie << endl; if( file.good() == true ) { while( !file.eof() ) { getline( file, test ); if( !test.size() ||( test[ 0 ] >= '0' && test[ 0 ] <= '9' ) ) { t++; if( pytanie == t ) { getline( file, zawartosc ); } } } cout << zawartosc; string pyt; string odp1; string odp2; string odp3; string odp4; int w[ 5 ]; for( int q = 0; q < 5; q++ ) w[ q ] = 0; for( int i = 0; i < zawartosc.size(); i++ ) { if( zawartosc[ i ] == '=' ) { if( w[ 0 ] < 1 ) w[ 0 ] = i + 1; else if( w[ 1 ] < 1 ) w[ 1 ] =( i - 1 ); else if( w[ 2 ] < 1 ) w[ 2 ] = i + 1; else if( w[ 3 ] < 1 ) w[ 3 ] = i - 1; else if( w[ 4 ] < 1 ) w[ 4 ] = i + 1; } } pyt = zawartosc.substr( w[ 0 ], w[ 1 ] - 1 ); odp1 = zawartosc.substr( w[ 1 ], w[ 2 ] - 1 ); odp2 = zawartosc.substr( w[ 2 ], w[ 3 ] - 1 ); odp3 = zawartosc.substr( w[ 3 ], w[ 4 ] - 1 ); odp4 = zawartosc.substr( w[ 4 ], zawartosc.size() ); cout << "\nzawartosc pytania: " << pyt << endl; for( int z = 0; z < 5; z++ ) cout << w[ z ] << endl; cout << endl << odp1 << endl << odp2 << endl << odp3 << endl << odp4 << endl; } }
Przy zawartości pliku: 1=Stolicą Polski jest=krakow=lublin=wilno=warszawa 2=Słowo 'koks' ma=2 litery=3 litery=5 liter=4 litery 3=Jesteś...=fajny=mniej fajny=miły=super W konsoli mam: http://iv.pl/images/49178349334648452085.jpgZechciałby ktoś pomóc laikowi w c++? |
|
« 1 » 2 3 |