Porównanie tekstów

0

Pewnie dla osób obeznanych w C to nie będzie problem ale mnie to przerasta. Mam za zadanie porównać ile razy słowa z jednego pliku (tu keywords.txt) pojawiają się w drugim (tu student.txt) i wyskakują jakieś wartości z sufitu. Pewnie źle przyporządkowuje tekst do zmiennej ale nie jestem pewien.

#include <stdio.h>
#include <string.h>
int main()
{
    FILE *fr;
    FILE *fs;
    FILE *ft;
    int r,s;
    char bufor[512];
    char *spl;
    char *spd;
    char bufor2[512];
    size_t m;
    const char *filename = "student.txt";
    const char *filename2 = "keywords.txt";

 if ((fr = fopen(filename, "r")) == NULL) {
        fprintf(stderr, "error: file" "\n");
        return 1;
 }
  if ((fs = fopen(filename2, "r")) == NULL) {
        fprintf(stderr, "error: file" "\n");
        return 1;
 }

        while ((r = fscanf(fr, "%*100s")) != EOF)
{

while (feof(fr)==0)
    {
     fscanf(fr,"%s",bufor);
    spd = strtok(bufor, " (){},;-");
    while (spd != NULL)
    {
       spd = strtok(NULL," (){},;-");
    }
    }
}
while  ((r = fscanf(fs, "%*100s")) != EOF)
    {
while (feof(fs)==0)
    {
     fscanf(fs,"%s",bufor2);
     spl = strtok(bufor2," (){},;-");
     while (spl != NULL)
  {
    spl = strtok (NULL, " (){},;-");
  }
    }
    }

if (strcmp(bufor,bufor2)==0)
{
    m++;
}
    if (ferror(fr) != 0) {
        fprintf(stderr, "error: read file" "\n");
        fclose(fr);
        return 1;
    }

    if (m==1)
    {
        printf("Keywords appear %lu time", m);
    }
    else
    printf("Keywords appear %lu times", m);

    return 0;

}
2

Liczysz sobie to do zmiennych (m na przykład), których na początku nie zerujesz, więc mają "losowe" wartości.

2
  1. Zapoznaj się z pojęciem formatowania kodu: http://4programmers.net/Forum/998482
  2. Używaj znaczników <``code> <``/code>
  3. Zamiast strtok (który jest okropnie powolny) - radzę użycia sscanf wraz z %n
2

No i nazywaj te zmienne jak człowiek, bo to okropieństwo jest. Jakieś r, s, m. filename akurat Ci się udało.

0

Wartość zmiennej m wyzerowana ale teraz wskazuje 0 tak jakby nie dodawało

1

Sformatuj kod tutaj
http://format.krzaq.cc/
i pokaż

0

#include <stdio.h>
#include <string.h>
int main()
{
FILE* fr;
FILE* fs;
FILE* ft;
int r, s;
char bufor[512];
char bufor2[512];
size_t count;
const char* filename = "student.txt";
const char* filename2 = "keywords.txt";

if ((fr = fopen(filename, "r")) == NULL) {
    fprintf(stderr, "error: file"
                    "\n");
    return 1;
}
if ((fs = fopen(filename2, "r")) == NULL) {
    fprintf(stderr, "error: file"
                    "\n");
    return 1;
}

while ((r = fscanf(fr, "%*100s")) != EOF) {

    while (feof(fr) == 0) {
        fscanf(fr, "%s", bufor);
        sscanf(filename, "%s", bufor);
    }
}
while ((r = fscanf(fs, "%*100s")) != EOF) {
    while (feof(fs) == 0) {
        fscanf(fs, "%s", bufor2);
        sscanf(filename2, "%s", bufor2);
    }
}

count = 0;
if (strcmp(bufor, bufor2) == 0) {
    count++;
}
if (ferror(fr) != 0) {
    fprintf(stderr, "error: read file"
                    "\n");
    fclose(fr);
    return 1;
}

if (count == 1) {
    printf("Keywords appear %lu time", count);
}
else
    printf("Keywords appear %lu times", count);

return 0;

}

Format !Style :

C++ online code formatter © 2014 by KrzaQ

    Powered by vibe.d,
the D language and clang - format
1

Co wg ciebie ma oznaczać: sscanf(filename, "%s", bufor); ?
Zapoznaj się z inkrementacją: http://4programmers.net/Forum/1101404

0

Myślałem że ładuje tekst z pliku do zmiennej bufor ale przecież już jedna linia to robi także jest faktycznie bez sensu.

2

Ok, a to wg ciebie co ma oznaczać: fscanf(fs, "%s", bufor2); ?
Programowanie metodą przypadkowego wklejenia kodu w przypadkowe miejsce z góry skazane na porażkę.
Brakuje ci podstaw z podstaw - które znajdziesz w byle kursie - wybierz najkrótszy.

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