Cześć!
Mam za zadanie napisać program tworzący nowy zbiór zJednaSamogloska.txt, w którym zapiszę wszystkie słowa(max.20 literowe) ze zbioru slownik.txt, w których występuje tylko jedna samogłoska (niekoniecznie 1 raz). Wszystkie litery w słowniku są zapisane dużymi literami.
Oto mój sposób na to zadanie:
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define ROZMIAR sizeof samogloski/sizeof(char)
char samogloski[] = {'A', 'Ą', 'E', 'Ę', 'I', 'O', 'Ó', 'U', 'Y'};
int znaleziono[ROZMIAR];
int main(void)
{
char slowo[20];
FILE *plik1, *plik2;
plik1 = fopen("slownik.txt", "r");
plik2 = fopen("zJednaSamogloska.txt", "w");
while (feof(plik1) == 0)
{
fscanf(plik1, "%s", slowo);
int i, j;
for (i = 0; i < ROZMIAR; i++)
for (j = 0; slowo[j] != '\0'; j++)
if (samogloski[i] == slowo[j])
znaleziono[i]++;
if (znaleziono[0] != 0 && znaleziono[1] == 0 && znaleziono[2] == 0 && znaleziono[3] == 0 && znaleziono[4] == 0 && znaleziono[5] == 0 && znaleziono[6] == 0 && znaleziono[7] == 0) fprintf(plik2, "%s\n", slowo);
else if (znaleziono[0] == 0 && znaleziono[1] != 0 && znaleziono[2] == 0 && znaleziono[3] == 0 && znaleziono[4] == 0 && znaleziono[5] == 0 && znaleziono[6] == 0 && znaleziono[7] == 0 && znaleziono[8] == 0) fprintf(plik2, "%s\n", slowo);
else if (znaleziono[0] == 0 && znaleziono[1] == 0 && znaleziono[2] != 0 && znaleziono[3] == 0 && znaleziono[4] == 0 && znaleziono[5] == 0 && znaleziono[6] == 0 && znaleziono[7] == 0 && znaleziono[8] == 0) fprintf(plik2, "%s\n", slowo);
else if (znaleziono[0] == 0 && znaleziono[1] == 0 && znaleziono[2] == 0 && znaleziono[3] == 0 && znaleziono[4] != 0 && znaleziono[5] == 0 && znaleziono[6] == 0 && znaleziono[7] == 0 && znaleziono[8] == 0) fprintf(plik2, "%s\n", slowo);
else if (znaleziono[0] == 0 && znaleziono[1] == 0 && znaleziono[2] == 0 && znaleziono[3] == 0 && znaleziono[4] == 0 && znaleziono[5] != 0 && znaleziono[6] == 0 && znaleziono[7] == 0 && znaleziono[8] == 0) fprintf(plik2, "%s\n", slowo);
else if (znaleziono[0] == 0 && znaleziono[1] == 0 && znaleziono[2] == 0 && znaleziono[3] == 0 && znaleziono[4] == 0 && znaleziono[5] == 0 && znaleziono[6] != 0 && znaleziono[7] == 0 && znaleziono[8] == 0) fprintf(plik2, "%s\n", slowo);
else if (znaleziono[0] == 0 && znaleziono[1] == 0 && znaleziono[2] == 0 && znaleziono[3] == 0 && znaleziono[4] == 0 && znaleziono[5] == 0 && znaleziono[6] == 0 && znaleziono[7] != 0 && znaleziono[8] == 0) fprintf(plik2, "%s\n", slowo);
else if (znaleziono[0] == 0 && znaleziono[1] == 0 && znaleziono[2] == 0 && znaleziono[3] == 0 && znaleziono[4] == 0 && znaleziono[5] == 0 && znaleziono[6] == 0 && znaleziono[7] == 0 && znaleziono[8] != 0) fprintf(plik2, "%s\n", slowo);
for (i = 0; i < ROZMIAR; i++)
znaleziono[i] = 0;
}
fclose(plik2);
fclose(plik1);
printf("Skonczylem");
return 0;
}
Podejrzewam, że można to zrobić bardziej ekonomicznie niż za pomocą if-else, bo gdybym miała 30 liter, musiałabym wypisać 30 przypadków......ale nic mi nie przychodzi do głowy... Proszę o jakieś wskazówki :)