Okej zrobiłem to w taki sposób, że linie tekstu wczytuje z pliku do tablicy jednowymiarowej d.
Następnie stworzyłem dwie funkcje, (ile_slow) przeczesuje tą linie tekstu i zwraca ilość słów w tej linii, a druga funkcja (najdluzszyWyraz) zwraca długość najdłuższego wyrazu w całej linii tekstu.
Te dwie dane używam do stworzenia tablicy 2d gdzie ilość kolumn wskazuje (ile_slow) a ilość wierszy (najdluzszyWyraz).
Następnie wypełniam spacjami całą tablice 2d prostym for-em, i potem robie kolejnego for-a, który wypełnia kolumnami te znaki z tablicy 1d do 2d.
Wypełnienie spacjami było po to, aby można było zrobić warunek że pętla napotka wartość spacji ' ' to przechodzi do nastepnej kolumny i spisuje kolejny wyraz juz w niej.
Myśle, że zarys jest ok tylko kurde wyskakuje mi błąd związany z pamięcią (kod pisałem w Virtual Studio), wklepałem błąd w AI zeby dowiedzieć się o co biega i wyskoczyło coś takiego:
"Błąd o kodzie -1073741819 jest jednym z popularnych kodów błędów w systemie Windows. Ten konkretny kod błędu to często wynik naruszenia pamięci, znane również jako Access Violation. Oznacza to, że program próbował uzyskać dostęp do obszaru pamięci, do którego nie miał uprawnień, co prowadzi do nieoczekiwanego zakończenia programu."
Za cholere nie widze gdzie jest ten błąd, jeśli ktoś zauważył i wskaże o co chodzi to będę wdzięczny
kod:
#pragma warning (disable: 4996)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE 256
FILE* fd = NULL;
int ile_slow(char te[]);
int najdluzszyWyraz(char d[], int dlugosclinii);
int main() {
char* d = NULL;
d = (char*)malloc(MAX_LINE * sizeof(char));
if(!d)
{
printf("Blad allokacji pamieci\n");
exit(1);
}
int l = 0, dlugosclinii=0, max = 0;
if (!(fd = fopen("DANE.txt", "r")))
{
printf("Blad otwarcia zbioru\n");
exit(2);
}
while (fgets(d, MAX_LINE, fd) != (char*)NULL)
{
dlugosclinii = strlen(d);
l += ile_slow(d);
max = najdluzszyWyraz(d, dlugosclinii);
}
fclose(fd);
fd = NULL;
//tworzenie tabeli 2d
char** tab;
tab = (char**)malloc(sizeof(char*) * max);
if (!tab)
{
printf("Blad allokacji pamieci\n");
exit(3);
}
for (int i = 0; i < max; i++)
{
tab[i] = (char*)malloc(sizeof(char) * l);
if (!tab[i])
{
printf("Blad allokacji pamieci\n");
exit(4);
}
}
//wypełnienie tabeli spacjami
for (int i = 0; i < l; i++) {
for (int j = 0; j < max; j++) {
tab[i][j] = ' ';
}
}
int col = 0;
int row = 0;
for (int j = 0; j < dlugosclinii; j++)
{
if (d[j] != ' ')
{
tab[col][row] = d[j];
col++;
}
else
{
col = 0;
row++;
}
}
printf("Wypelniona dwuwymiarowa tablica:\n");
for (int i = 0; i < max; ++i)
{
for (int j = 0; j < l; ++j)
{
printf("%c ", tab[i][j]);
}
printf("\n");
}
if (tab)
{
for (int i = 0; i < max; i++)
{
if (tab[i])
{
free(tab[i]);
}
}
free(tab);
tab = NULL;
}
if (d)
free(d);
d = NULL;
return 0;
}
int ile_slow(char te[])
{
/* Ile jest slow w linii tekstu. Tablice w argumentach funkcji*/
char p = ' ', b;
int l = 0, i = 0;
while (b = te[i++])
{
if (b != ' ')
if (p == ' ') l++;
p = b;
}
return l;
}
int najdluzszyWyraz(char d[],int dlugosclinii)
{
int i = 0, licz=0, max=0;
for (i = 0; i < dlugosclinii; i++)
{
if (d[i] != ' ') {
licz++;
}
else
{
if (licz > max)
{
max = licz;
}
licz = 0;
}
}
// sprawdzam, czy ostatnie słowo jest najdłuższe
if (licz > max) {
max = licz - 1;
}
return max;
}