Witam. Stworzyłem program który pobiera zdanie z pliku oraz pojedyncze wyrazy z drugiego pliku, a następnie powinien zliczyć które wyrazy z pierwszego pliku nie wystepują w drugim pliku. Wynik powinien wyglądać tak:
Programowanie: 2 razy --> plik pojawia się w pliku pierwszym 2 razy i nie występuje w drugim.
Natomiast u mnie wygląda to tak:
Programowanie: 2 razy
Programowanie: 2 razy
Co zrobić żeby to drugie już się nie pojawiło?
Nadmienię, iż są to zmienne zdefiniowane następująco:
string Słowo[1000];
Wrzucaj do jakiegoś seta i wypisz na końcu.
Jedno z:
- Posortować, usunąć duplikaty
- Przed wyświetleniem sprawdzić czy to słowo występuje wcześniej czy nie.
Wszystko by było super tylko z niewiadomych przyczyn z byle powodów pojawia mi sie bład "Program przestał działać" np gdy chce wyzerować jakaś zmienną która przed chwilą zdefiniowałem. Czym może być spowodowany taki błąd?
I jeszcze jedno pytanko z tego tematu; ) Słowa w pierwszym pliku są porozdzielane różnymi znakami. Za pomocą ifa i wartości ASCII dla liter udało mi się zapełnić tablicę wyrazami tylko, że tam gdzie były obok siebie np 2 znaki inne niż litery np.%% wtedy tworzy mi się niepotrzebny enter który nie wiem czemu ale również zapisuje się w tablicy. Entery te później także się zliczają i wychodzi coś w tym stylu:
: 7 razy. Można to pominąć jakimś ifem? Próbowałem czegoś w tym stylu
If (slowo[y]==""){
}else {
cout<<slowo[y]<<endl;
}
ale nie działa;/ Jakieś pomysły?
if((90>=int(tekst[i])) && (int(tekst[i])>=65)){
slowo[y]=slowo[y]+tekst[i];
} else if((122>=int(tekst[i])) && (int(tekst[i])>=97)){
tekst[i]=int(tekst[i])-32;
slowo[y]=slowo[y]+tekst[i];
} else {
y=y+1;
licznik=licznik+1;
}
}
Tak wygląda to dzielenie zdania na słowa.
if(slowo[x] != '\n')
cout << slowo;
Jak juz + http://stackoverflow.com/questions/236129/splitting-a-string-in-c
No niestety nie działa;/ nadal wyświetla:
Wyrazy spoza slownika:
SLOWNIKIEM: 1razy
NADZOREM: 1razy
: 3razy
WYRAZAMI: 2razy
OBCYMI: 1razy
WYRAZAMI: 2razy
BLISKOZNACZNYMI: 1razy
: 3razy
: 3razy
Człowieku wrzuć porzadnie kod, cały i w znacznikach bo nikt ci pomagać nie będzie jak ma się sam domyślać.
Jak sobie życzysz. Program składa się z trzech plików dlatego wzbraniałem sie przed wysyłaniem go.
Teoretycznie wydaje mi się że wszystko jest dobrze jednak z niewiadomych mi przyczyn się wysypuje
źle zrozumiałem qweqwe oto kod:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cctype>
#include "funkcje.h"
#include <sstream>
using namespace std;
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Program nalezy uruchomic podajac dwa argumenty:\n");
printf("%s [slownik] [plik do sprawdzenia]", dajNazweProgramu(argv[0]) );
return EXIT_FAILURE;
}
if (!plikDostepny( argv[1] )) {
printf("Nie mozna odczytac pliku slownika: %s\n", argv[1] );
return EXIT_FAILURE;
}
if (!plikDostepny( argv[2] )) {
printf("Nie mozna odczytac pliku do sprawdzenia: %s\n", argv[2] );
return EXIT_FAILURE;
}
int licznik,licznik2,x,z;
int l,i,rozmiar_slownika,y;
string slowo[1000];
string tekst2[1000];
string wyswietlone[1000];
char** slownik = wczytajSlownik( argv[1], &rozmiar_slownika );
char* tekst = wczytajTekst( argv[2] );
/* Wyswietlanie zawartosci slownika
printf( "Slownik: %s\n", argv[1]);
for (int i=0;i<rozmiar_slownika;i++)
printf( "%s\n", slownik[i] );
*/
/* Wyswietlanie tekstu do sprawdzenia
printf( "Tekst: %s\n", tekst );
printf( "Pierwsza litera tekstu: %c\n", tekst[0] );
*/
// TU WPISZ PROGRAM
for (int i=0;i<rozmiar_slownika;i++)
x=strlen(tekst);
licznik2=0;
licznik=0;
y=0;
for (i=0;i<=x;i++){
if((90>=int(tekst[i])) && (int(tekst[i])>=65)){
slowo[y]=slowo[y]+tekst[i];
} else if((122>=int(tekst[i])) && (int(tekst[i])>=97)){
tekst[i]=int(tekst[i])-32;
slowo[y]=slowo[y]+tekst[i];
} else {
y=y+1;
licznik=licznik+1;
}
}
printf("Wyrazy spoza slownika: \n");
for (y=0;y<=licznik;y++){
x=0;
for (i=0;i<=rozmiar_slownika;i++){
tekst2[i]=slownik[i];
if (tekst2[i]==slowo[y]){
x++;
}
}
licznik2=0;
if (x==0){
for(i=0;i<=licznik;i++){
if (slowo[y]==slowo[i]){
licznik2++;
}
}
for (z=0;z<=y;z++){ //// PO DODANIU TEGO (WYSWIETLENIE TYLKO RAZ DANEGO SLOWA)
if (slowo[y]==wyswietlone[z]){ //// WYSKAKUJE BLAD: PROGRAM PRZESTAŁ DZIALAC- CZEMU?
l=l+1;
}
}
if (l==0){
cout<<slowo[y]<<": "<<licznik2<<"razy"<<endl;
}
}
}
return EXIT_SUCCESS;
}