Dzielenie tekstu na wyrazy
Ostatnio zmodyfikowano 2015-07-24 21:36
bamboo Temat założony przez niniejszego użytkownika |
Dzielenie tekstu na wyrazy » 2015-07-21 15:50:13 Cześć, mam za zadanie napisać program, który wczyta z pliku listę parametrów i jeden po drugim zapisze w kontenerze vector. Wszystko jest okej, jednak jest jeden mały ale uciążliwy problem, mianowicie program nie wczystuje wszystkiego. #include <iostream> #include <fstream> #include <conio.h> #include <vector>
using namespace std;
ifstream plik; string wiersz; int klawisz; string strPolecenie;
vector < string > vecNapisy;
void vLoadFile() { plik.open( "folder/file.txt" ); if( !plik.good() ) { cout << "Plik nie został otwaty" << endl; } if( plik.eof() ) { cout << "Plik jest pusty" << endl; } }
void Polecenia( string strNapis ) { string slowo, litera; int dlugosc = strNapis.length(); for( int i = 0; i < dlugosc + 1; i++ ) { string litera( strNapis, i, 1 ); if( litera != " " && litera != "\t" && litera != "\n" && litera != "\v" && litera != "\f" && litera != "\r" ) { slowo += litera; } else { vecNapisy.push_back( slowo ); slowo = ""; } } }
int main() { vLoadFile(); int ilinie = - 1; do { getline( plik, strPolecenie ); cout << strPolecenie << " " << strPolecenie.length() << endl; Polecenia( strPolecenie ); ilinie++; } while( !plik.eof() ); for( int i = 0; i < vecNapisy.size(); i++ ) { cout << vecNapisy[ i ] << endl; } cout << vecNapisy.size() << "/" << ilinie << "=" << vecNapisy.size() / ilinie << endl; return 0; }
folder/file.txt BL 380 314 145 BP 380 314 145 CK 537 70 242 FT1 567 302 112 FT2 567 302 186 PC 1576 328 178 PPIO1 361 314 145 PPIO2 361 314 145 PS 450 341 121 WD 1600 380 121 WG 1600 400 178
Na wyjściu brak jest ostatniej kolumny, nie wiem gdzie zrobiłem błąd więc proszę Was o pomoc. Z góry dzięki |
|
pekfos |
» 2015-07-21 16:21:34 void Polecenia( string strNapis ) { string slowo, litera; int dlugosc = strNapis.length(); for( int i = 0; i < dlugosc + 1; i++ ) { string litera( strNapis, i, 1 ); if( litera != " " && litera != "\t" && litera != "\n" && litera != "\v" && litera != "\f" && litera != "\r" ) { slowo += litera; } else { vecNapisy.push_back( slowo ); slowo = ""; } } }
|
Nie używasz zmiennej litera zadeklarowanej na początku. Niepotrzebnie tworzysz też stringa, skoro porównujesz wyłącznie pojedyncze znaki. Zrób char litera = strNapis[i];, porównuj ze stałymi znakowymi, a nie łańcuchami i dodaj przypadek, gdy znak jest równy '\0'. Iterujesz po całym c-stringu, ale zabrakło ci wykrywania jego końca. W zasadzie wszystkie te przypadki możesz uchwycić wywołaniem isgraph(litera) z <cctype>, to znacząco uprości ten kod. Poza tym, ten plik wydaje się mieć dość prosty format słowa i 3 liczb oddzielonych spacjami w każdej linii. Czemu nie wczytasz tego operatorem >>? Od razu będziesz mieć dobre typy, co ułatwi przetwarzanie, a do wektora wrzucisz obiekty odpowiednio zdefiniowanej struktury. |
|
bamboo Temat założony przez niniejszego użytkownika |
» 2015-07-24 21:36:43 Wszystko działa, dzięki za pomoc ;) |
|
« 1 » |