[ Príspevkov: 8 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.10.12
Prihlásený: 21.10.15
Príspevky: 18
Témy: 5 | 5

Dobrý deň, pracujem na jednom projekte a mám za úlohu v spájanom zozname nájsť zhodný retazec a vymazať celú štruktúru v ktorej sa nachádza ten retazec.

Kód:
typedef struct tovar {
char str1
char str2
char str3
int cislo
int cislo
char str4
struct tovar *dalsi;
}TOVAR;

TOVAR *zmaz(TOVAR *zoznam)  //funkcia na zmazanie poloziek podla zadanej znacky
{
    char str[51];
    int i=0,j=0,zhoda = 0,dlzka;
    char pom[51];
    int pocet_zaznamov=0;
    TOVAR *tmp,*next;
    tmp=zoznam;
    scanf("%s",str);
    dlzka = strlen(str);
   
    next = tmp;
    while(tmp != NULL)
    {
        while (tmp->str2[i] != '\0')   //prerobenie na male písmená
        {
            pom[i] = tolower(tmp->str2[i]);
            str[i] = tolower(str[i]);
            i++;
        }
        pom[i] = '\0';
        i=0;
        while (pom[i] != '\0')   //hľadanie zhody pretože zadaný retazec moze byt aj mensi ako definovany
        {
            if (str[j] == pom[i])
            {
                zhoda++;
                j++;
            }
            else if (str[j-1] == pom[i])
            {
            }
            else if (zhoda == dlzka)   //vycistenie (nefunguje)
            {
                next = tmp->dalsi;
                free(tmp);
                tmp = next;
                zhoda = 0;
                pocet_zaznamov++;
            }
            else
            {
                zhoda = 0;
                j=0;
            }
            i++;
        }
        tmp=tmp->dalsi;
        i=0;
    }
   
    printf("Zmazalo sa %d zaznamov \n",pocet_zaznamov);
   
    return zoznam;
}

Takto mi to vymaze iba zaciatok ale ak chcem vyprazdnit vsetky veci tak mi napise ze nemoze ju vyprazdnit ked nebola alokovana
Ak by sa niekomu chcelo a poradil mi ako to mám správne prerobiť aby mi to vymazalo iba tú štruktúru ktorú potrebujem bol by som veľmi vdačný.
Vopred ďakujem


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3

1. Prečo v poslednom else nuluješ zhodu aj j a v mazaní nuluješ len zhodu?
2. Prečo tam máš všade else if? Trafíš sa vôbec niekedy do toho mazania (zhoda==dlzka)? Zhodu inkrementuješ, v ďalšom cykle možno tiež a rovnať sa ti to nebude. Resp. bude len v prípade, že v ďalšom cykle sa nesplnia tie dve podmienky pred tým.
3. Poznámka: tolower môžeš používať priamo v podmienke if( tolower(a) == tolower(b) ) a nemusíš to celé prechádzať dva krát.


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 22.10.12
Prihlásený: 21.10.15
Príspevky: 18
Témy: 5 | 5
Napísal autor témyOffline : 07.12.2013 10:07 | C- Vyčistenie jednej struktury v spajanom zozname

Tak som ten kód zjednodušil na takýto tvar ale stále to nerieši môj problém s vyčistením štruktúry
Kód:
TOVAR *zmaz(TOVAR *zoznam)  //funkcia na zmazanie poloziek podla zadanej znacky
{
    char str[51];
    int i=0;
    char pom[51];
    char *str_pom;
    int pocet_zaznamov=0;
    TOVAR *tmp_automobil,*next_automobil=NULL;
    tmp_automobil=zoznam;
    scanf("%s",str);
   
    next_automobil = tmp_automobil;
    while(tmp_automobil != NULL)
    {
        while (tmp_automobil->znacka[i] != '\0')
        {
            pom[i] = tolower(tmp_automobil->znacka[i]);
            str[i] = tolower(str[i]);
            i++;
        }
        str_pom = strstr(pom, str);
        if (str_pom != NULL)
        {
            free(tmp_automobil);
            pocet_zaznamov ++;
        }
        tmp_automobil=tmp_automobil->dalsi;
        i=0;
    }
   
    printf("Zmazalo sa %d zaznamov \n",pocet_zaznamov);
   
    return zoznam;


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.11.12
Prihlásený: 25.12.14
Príspevky: 40
Témy: 13 | 13

no tak máš tam chybu v scanf, máš to scanf("%s",str); a má byť scanf("%s",&str);


Offline

Čestný člen
Čestný člen
C- Vyčistenie jednej struktury v spajanom zozname

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno

Ma to spravne, ved retazec je pointer. Kazdopadne "%50s" namiesto "%s" by bolo bezpecnejsie. ; )


Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 01.11.12
Prihlásený: 25.12.14
Príspevky: 40
Témy: 13 | 13

nie pretože v scanf pri tých premenných či ako sa to volá musí byť vždy &, čítal som to ešte pred rokom v učebnici, zostalo mi toho ešte kopu, neviem prečo ale že musí byť to je taký rozdiel


Offline

Čestný člen
Čestný člen
C- Vyčistenie jednej struktury v spajanom zozname

Registrovaný: 11.08.07
Príspevky: 4088
Témy: 34 | 34
Bydlisko: Brno

No, "nevies preco", tak to ocividne nerozumies ani zakladom C (je pravda, ze ja tiez nie, ale aspon si nieco skusim overit predtym, ako trepnem blbost). Este raz, pole v C je ukazatel na prvy prvok, preto ten ampersand uz nie je ziaduci a ak ho tam das, pri kompilacii s -Wall ti to vyhodi aj warning.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 17.07.11
Prihlásený: 29.12.20
Príspevky: 1516
Témy: 3 | 3

V prvom rade, na tie kecy okolo ampersandov, "lebo som to čítal v učebnici", radšej nereagujem. Akoby to tu ani nebolo. Ale je pravda, že scanf nie je na načítanie reťazcov úplne dobrý, používa sa radšej funkcia gets.

V druhom rade, ten zjednodušený kód už ani len nepripomína mazanie prvku zo spojového zoznamu. V prípade, že je prvok správny a má sa zmazať, zmažeš si ho a potom chceš zrazu pristupovať k ďalšiemu. Ale akému ďalšiemu, keď si ho už zmazal?!
Nájdi si, ako sa maže prvok zo spojového zoznamu a zmaž to správne (typicky tam iteruješ dva ukazatele, predošlý a aktuálny). Potom by to malo fungovať, už naozaj nevidím dôvod, prečo nie.

// No dobre, aby som nebol zlý, tak aby bolo jasné: scanf očakáva ako parameter adresu prvku, do ktorého má vložiť hodnotu. Adresu prvku preto, lebo sa to správa ako tzv. vstupno-výstupný parameter, alebo v tomto prípade len výstupný parameter (viz lepšie učebnice)


_________________
Na súkromné správy týkajúce sa problémov, ktoré sa riešia vo fóre, neodpovedám!
 [ Príspevkov: 8 ] 


C- Vyčistenie jednej struktury v spajanom zozname



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

c struktury

v Assembler, C, C++, Pascal, Java

5

267

04.01.2013 16:54

marian_r

V tomto fóre nie sú ďalšie neprečítané témy.

Zapojenie jednej GTX 980 a jednej GTX 980 TI do SLI

v PC zostavy

3

690

17.08.2015 14:29

brmbo

V tomto fóre nie sú ďalšie neprečítané témy.

načítanie stromovej štruktúry

v Databázy

7

1057

26.10.2008 20:14

p360t

V tomto fóre nie sú ďalšie neprečítané témy.

struktury a subory

v Assembler, C, C++, Pascal, Java

7

551

24.12.2009 14:32

reDo

V tomto fóre nie sú ďalšie neprečítané témy.

Oddelenie logiky od struktury

v PHP, ASP

12

614

14.11.2009 0:01

Snacker

V tomto fóre nie sú ďalšie neprečítané témy.

thickbox v ul zozname

v JavaScript, VBScript, Ajax

0

322

21.02.2010 13:22

senty

V tomto fóre nie sú ďalšie neprečítané témy.

Pozadie vo vnorenom zozname

v HTML, XHTML, XML, CSS

2

438

13.04.2011 17:50

M4rek

V tomto fóre nie sú ďalšie neprečítané témy.

Problém v zozname programov

v Operačné systémy Microsoft

5

401

03.11.2010 19:08

jkphoenix

V tomto fóre nie sú ďalšie neprečítané témy.

Problem s menu v zozname

v HTML, XHTML, XML, CSS

8

490

17.02.2008 19:58

Creation

V tomto fóre nie sú ďalšie neprečítané témy.

Vycistenie ram?

v Pamäte

12

7599

01.02.2010 21:58

shiro

V tomto fóre nie sú ďalšie neprečítané témy.

Vycistenie vetracikov

v AMD - Advanced Micro Devices

15

1484

10.09.2007 19:23

Harlequin

V tomto fóre nie sú ďalšie neprečítané témy.

Vycistenie PC

v Antivíry a antispywary

8

1196

15.03.2009 11:04

Mandy

V tomto fóre nie sú ďalšie neprečítané témy.

Vyčistenie PC

v Ostatné

3

288

13.12.2014 18:54

Mandy

V tomto fóre nie sú ďalšie neprečítané témy.

Vyčistenie PC!

v Ostatné

6

1108

07.10.2009 20:05

Mr.Azed

V tomto fóre nie sú ďalšie neprečítané témy.

vycistenie disku

v Ostatné programy

15

1560

12.02.2009 10:33

edulinko

V tomto fóre nie sú ďalšie neprečítané témy.

Zmena písmena disku (nie je v zozname)

v Operačné systémy Microsoft

3

328

17.02.2013 2:40

S1anley



© 2005 - 2024 PCforum, edited by JanoF