Sortowanie i wypisanie w odpowiedniej kolejności

Odpowiedz Nowy wątek
2015-01-19 19:02
0

Witam.
Proszę was o pomoc przy rozwiązaniu mojego problemu. Jestem dopiero na początku swojej nauki języka C i mam do napisania program, w którym wczytuje dane z pliku tekstowego, następnie porównuje wiersze(program ma porównywać litery w odpowiednich kolumnach dwóch wierszy aż do momentu kiedy znajdzie różnice i zdecyduje który wynik ma być wypisany pierwszy). Po sortowaniu wyniki miały być ustawione w kolejności alfabetycznej(mamy wiersze abd jop aab a kolejność po sortowaniu aab abd jop i wszystkich czynnościach wyświetlone w odpowiedniej kolejności).
Oto kod:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <time.h>
#include <conio.h>

int porownaj(char *a, char *b)
{
int lenght;
int lenght1 = strlen(a);
int lenght2 = strlen(b);
if (lenght1 < lenght2)
lenght = lenght1;
else
lenght = lenght2;

int i;
for(i=0;i<lenght;i++)
{
if((int) a[i]> (int) b[i])
return 0;
else
return 1;
}
if(lenght2<lenght1)
return 0;
}

void wstaw(char *n, char *tabw[], int licznik)
{
int a;
int b = -1;
int i;

for (i = 0; i<licznik; i++)
{
a = porownaj(n, tabw[i]);

if (a == 1)
{
b = i;
break;
}
}

if (b == -1)
{
b = licznik++;
}

for (i = licznik; i >= b; --i)
{
strcpy(tabw[i + 1], tabw[i]);
}

strcpy(tabw[b], n);
}

int main(int argc, char *argv[])
{
char n[256];
char *tabw[100];
int i;
for (i = 0; i < 100; i++)
{
tabw[i] = (char *)malloc(sizeof(char*));
}

FILE *fp;
fp = fopen("", "r");
if (fp == NULL)
printf("nie otworzono pliku");
char c;
while((c=fgetc(fp))!=EOF)
{
printf("%c",c);
}
int licznik = 0;

while (!feof(fp) || licznik>100)
{
fgets(n, 256, fp);
wstaw(n, tabw, licznik);
licznik++;
}

for (i = 0; i < licznik; i++)
printf("%s\n", tabw[i]);

return 0;
} 

Proszę o pomoc.

Pozostało 580 znaków

2015-01-19 20:07
1
  1. Zapoznaj się czym jest formatowanie
  2. Zapoznaj się czemu nie należy używać i++ - http://4programmers.net/Forum/1101404
  3. Zapoznaj się z funkcją sortującą http://www.cplusplus.com/reference/cstdlib/qsort/
  4. Zapoznaj się z funkcją kopiującą http://www.cplusplus.com/forum/beginner/16987/#msg85024
  5. Tu: tabw[i] = (char *)malloc(sizeof(char*)); przydzielasz 4 bajty (rozmiar wskaźnika), zaś tu: strcpy(tabw[b], n); próbujesz przekopiować do tych 4-ch bajtów napis o długości do 255 bajtów.

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

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