Program przetwarzający plik tekstowy - problem

Odpowiedz Nowy wątek
2012-09-23 20:07
0

Witam

Mam taki oto problem. Mój program ma odczytywać plit tekstowy, i każdy następny wyraz po wyrazie zawierającym "h" oraz "e" (obojętnie czy wielką czy małą literą), ale bez litery "t", podwajać w pliku wyjściowym (a pozostałe wyrazy kopiować normalnie). Za wyraz traktujemy wszystko co posiada literę, albo symbol "". Czyli "witam" jest wyrazem, "1witam" nie jest wyrazem i nie zostanie skopiowane. Przykład

Plik wejściowy:

That 1Katharina &&&^^& and Petruchio should be married,
And yet we hear not of our son-in-law.
What will be said? what mockery will it be,
To want the bridegroom when the priest attends
To speak the ceremonial rites of marriage!
What says Lucentio to this shame of ours?

Plik wyjściowy

That and Petruchio should be married,
And yet we hear notnot of our son-in-law.
What will be said? what mockery will it be,
To want the bridegroom when thethe priest attends
To speak the ceremonial rites of marriage!
What says Lucentio to this shame ofof ours?

Problem się robi, jak np tekst macierzysty będzie "hear ^not" albo dwie spacje "hear not" to juz nie działa jak należy.

KOD: http://pastebin.com/P97sVguA

Proszę o pomoc

edytowany 1x, ostatnio: syndrom88, 2012-09-23 20:08

Pozostało 580 znaków

2012-09-23 22:44
0

son-in-law
to słowo zgodnie z podanymi zasadami nie powinno być skopiowane.

Pozostało 580 znaków

2012-09-23 22:53
0

pomyliłem się, nie "^" tylko "-"

Pozostało 580 znaków

2012-09-24 12:46
0

Aleś namieszał.

int rewriteWhitespace(FILE *infile, FILE *outfile)
{
    int c; // zmienna na znak, musi być int! żeby wykryć EOF

    while (EOF != (c = fgetc(infile)) {
        if (!isspace(c)) {
            ungetc(c, infile);
            break;
        }
        fputc(c, outfile);
    }

    return c != EOF;
}

#define WORD_BUFF_SIZE 4096
#define WORD_SCAN_FMT "%4095s"
char word[WORD_BUFF_SIZE];

for (;;) {
    if (!rewriteWhitespace(infile, outfile)) break;
    if (!fscanf(infile, WORD_SCAN_FMT, word)) break;
    fputs(word, outfile);
    if (testWord(word)) fputs(word, outfile);
}

Funkcja testWord ma sprawdzić, czy podany łańcuch jest słowem które należy zdublować.

edytowany 2x, ostatnio: adf88, 2012-09-24 12:54
rewrite* - Rev 2012-09-24 12:49
rev-right :D - adf88 2012-09-24 12:51

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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