matid1234 Temat założony przez niniejszego użytkownika |
[C++] Problem w wyświetleniem danych w pliku. » 2013-12-22 12:49:18 Witam. Mam następujący problem: W pliku *.txt mam dane słowa, każde w nowej linii. Program działa następująco: pobiera napis, przypisuje poszczególnym znakom słowa odpowiednie cyfry z klawiatury telefonu (działa jak słownik T9) i zapisuje dane w nowym pliku *.txt w postaci (słowo znaki_kodowe_słowo), np (kot 568) k=5, 0=6, t=8, czyli tak jak na klawiaturze telefonu. Jednak problem jest taki, że program działa dobrze, ale wypisuje tylko pierwszą linie i odpowiednie cyfry słowa, następnie w każdej nowej linii już tylko same słowa, niestety bez cyfr, które odpowiadają danemu słowu. Problem mam też ze spacją gdy są dwa lub więcej wyrazów bo nie liczy spacji jako '0'. Dane z pliku t9.txt: abakanowicz abazur ruzaba abchazja abchazji abcugach abdul abdykacja abecadla abecadlo abel aberacje aberracja aberracje abiturient abla Poniżej zamieszczam kod programu: #include <conio.h> #include <iostream> #include <string> #include <cstdlib> #include <fstream>
using namespace std;
int p, n, dlug, i, k; int ciag[ 100 ];
void wczytaj();
int main() { wczytaj(); return EXIT_SUCCESS; }
void wczytaj() { fstream plik; plik.open( "t9.txt", ios::in ); ofstream plik2( "t_9.txt" ); string a, c, fraza; char alfabet[ 27 ] = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; if( plik.good() == true ) { while( !plik.eof() ) { cin.sync(); getline( plik, a ); plik2 << a << " "; dlug = a.length(); i = 0; char ch; while( dlug > i ) { c = a.substr( i, 1 ); ch = c[ 0 ]; p = 0; while( alfabet[ p ] != ch ) { if( ch == 'a' || ch == 'b' || ch == 'c' ) k = 2; else if( ch == 'd' || ch == 'e' || ch == 'f' ) k = 3; else if( ch == 'g' || ch == 'h' || ch == 'i' ) k = 4; else if( ch == 'j' || ch == 'k' || ch == 'l' ) k = 5; else if( ch == 'm' || ch == 'n' || ch == 'o' ) k = 6; else if( ch == 'p' || ch == 'q' || ch == 'r' || ch == 's' ) k = 7; else if( ch == 't' || ch == 'u' || ch == 'v' ) k = 8; else if( ch == 'w' || ch == 'x' || ch == 'y' || ch == 'z' ) k = 9; else if( ch == ' ' ) k = 0; p++; } ciag[ i ] = k; i++; } while( ciag[ n ] > 0 ) { plik2 << ciag[ n ]; n++; } plik2 << "\n"; } plik.close(); } else cout << "Slownik nie zostal wczytany poprawnie!\n"; } |
|
matid1234 Temat założony przez niniejszego użytkownika |
» 2013-12-22 14:29:00 Witam. Rozwiązałem problem z cyferkami, zostało tylko to z tą spacją. Zamiast zero wpisuje ostatnio zapamiętaną, np ala ma kota wpisze: 25226225682 zamiast 25206205682. Wie ktoś jak to rozwiązać? Poniżej poprawiony kod: #include <conio.h> #include <iostream> #include <string> #include <cstdlib> #include <fstream>
using namespace std;
int p, n, dlug, i, k; int ciag[ 100 ];
void wczytaj();
int main() { wczytaj(); return EXIT_SUCCESS; }
void wczytaj() { fstream plik; plik.open( "polish.txt", ios::in ); ofstream plik2( "polish_v2.0.txt" ); string a, c, fraza; char alfabet[ 27 ] = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; if( plik.good() == true ) { while( !plik.eof() ) { cin.sync(); getline( plik, a ); plik2 << a << " "; dlug = a.length(); i = 0; char ch; while( dlug > i ) { c = a.substr( i, 1 ); ch = c[ 0 ]; p = 0; while( alfabet[ p++ ] != ch ) { if( ch == 'a' || ch == 'b' || ch == 'c' ) k = 2; else if( ch == 'd' || ch == 'e' || ch == 'f' ) k = 3; else if( ch == 'g' || ch == 'h' || ch == 'i' ) k = 4; else if( ch == 'j' || ch == 'k' || ch == 'l' ) k = 5; else if( ch == 'm' || ch == 'n' || ch == 'o' ) k = 6; else if( ch == 'p' || ch == 'q' || ch == 'r' || ch == 's' ) k = 7; else if( ch == 't' || ch == 'u' || ch == 'v' ) k = 8; else if( ch == 'w' || ch == 'x' || ch == 'y' || ch == 'z' ) k = 9; else if( ch == ' ' ) k = 0; } ciag[ i++ ] = k; } n = 0; while( dlug-- > 0 ) plik2 << ciag[ n++ ]; plik2 << "\n"; } plik.close(); } else cout << "Slownik nie zostal wczytany poprawnie!\n"; } |
|
leon_w |
» 2013-12-22 15:31:26 char alfabet[ 27 ] = { ' ', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
|
Daj spacje na sam koniec. Nie wiem dlaczego, ale działa :P edit Ale nie do końca, pierwszej literze przypisuje '0' |
|
« 1 » |