Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Problem w wyświetleniem danych w pliku.

Ostatnio zmodyfikowano 2013-12-22 15:31
Autor Wiadomość
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:

C/C++
#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(); //dlugosc slowa
            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";
   
}
P-99800
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:

C/C++
#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(); //dlugosc slowa
            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";
   
}
P-99819
leon_w
» 2013-12-22 15:31:26
C/C++
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'
P-99837
« 1 »
  Strona 1 z 1