• Здраво и добредојдовте на форумот на IT.mk.

    Доколку сеуште не сте дел од најголемата заедница на ИТ професионалци и ентузијасти во Македонија, можете бесплатно да се - процесот нема да ви одземе повеќе од 2-3 минути, а за полесна регистрација овозможивме и регистрирање со Facebook и Steam.

[C] Барање подзбор во главниот збор ?

  • Ја почнал/а темата
  • #1

R3sp3cT

Intern
12 декември 2007
9
0
kako da napravam programa koja ce bara podzbor vo glavniot zvor stignav go tuka i zaglaviv ako moze malce pomos....


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char word1[50], word2[50];
int brojac=0,i=0;
printf("Vnesi go zvor:\n");
scanf("%s",&word1);
printf("Vnesi go podzborot:\n");
scanf("%s",word2);
while (word2 != '\0'){

if (word2 == word1) brojac++;
i++;

}
printf("Pod zborot %s vo zvorot %s se naoga %d pati \n",word2,word1,brojac);



system("PAUSE");
return 0;
}


NE MI GI SITA SITE BUKVI DO KRAJ U STO E ROTOBLRMOT PROBAV NA WHILE CIKLUSOT DA MU DODADAM I


ELSE (WORD2 != WORD1)BROJAC++;
I++;

NO NE BIVA PUKA
 
  • Ја почнал/а темата
  • #2

R3sp3cT

Intern
12 декември 2007
9
0
A RESIV

EVE JA

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
char word1[50], word2[50];
int brojac=0,i=0;
printf("Vnesi go zvor:\n");
scanf("%s",&word1);
printf("Vnesi go podzborot:\n");
scanf("%s",word2);
while (word2 != '\0'){

if (word2 != word1) brojac++;
i++;

}
printf("Pod zborot %s vo zvorot %s se naoga %d pati \n",word2,word1,brojac);



system("PAUSE");
return 0;
}
 

''TcM>>

Intern
6 јануари 2008
961
39
Ova poslednovo ocigledno ne e tocna :p
Ja jas nekako probuvav jas da ja resam i eve kako mi idese:

Код:
int dolzina(char string[])
{
    int count=0;
    while(string[count]!='')
    ++count;
    return count;
}

int main(int argc, char *argv[])
{
    int dolzina(char string[]);
    int k,n,i,brojac=0,t=0,p=0;
    char zbor[100];
    char podzbor[100];
    
    printf("Vnesi go zborot:");
    scanf("%s", &zbor);
    k=dolzina(zbor);
    
    printf("Vnesi go podzborot:");
    scanf("%s", podzbor);
    n=dolzina(podzbor);
        
    for (i=0; zbor[i]!=''; i++)
    {
        brojac++;
        while (podzbor[t]==zbor[t])
        {
           t++;
           if (n==t)
           {
           printf("Zborot %s e podzbor na zborot %s, i se naoga na %d meston", podzbor, zbor, brojac);
           p=1;
           }
        }
    }
    
    if (p!=1)
    printf("Zborot %s ne e podzbor na zborot %sn   ", podzbor, zbor);
     
  system("PAUSE");	
  return 0;
}
Ali zosto pa ni vaka nejke da raboti, mnogu me cudi. Ako ima nekoj da pokaze (dokolku saka)
 

Spion

Intern
25 септември 2007
48
4
Код:
#include <string.h>
#include <stdio.h>

int main()
{
        char zbor[80], podzbor[80], *poz;
        printf("Vnesi zborn");
        scanf("%s",zbor);
        printf("Vnesi podzborn");
        scanf("%s",podzbor);
        if ((poz = strstr(zbor, podzbor)))
        {
                printf("%s e podzbor na %s na pozicija %dn",
                                podzbor,zbor,poz - zbor + 1);
        }
        else { printf("%s ne e podzbor na %sn",podzbor,zbor); }
        return 0;
}
Забелешка: не е безбедно да се чита збор со scanf - програмот има buffer overflow.
 

LiquidWorm

Администратор
26 март 2007
2,667
183
www.zeroscience.mk
Добро...да размислуваме глобално...можеби ке го бапне некој ова у фукнција во некој ГОЛЕМ проект...затоа добра забелешка Spion :bravo: ;)
 
  • Ја почнал/а темата
  • #7

R3sp3cT

Intern
12 декември 2007
9
0
Добро...да размислуваме глобално...можеби ке го бапне некој ова у фукнција во некој ГОЛЕМ проект...затоа добра забелешка Spion :bravo: ;)

Nema vrska programata mi bese za simninarska ama gabee ne go zapaziv rokot no sekak nisto ostamuva da se vmetne u nekoj golem proekt kako sto rece kolegata sepak reden respect za nego :D:lut2::)
 

Петар

Intern
3 март 2008
1
0
Во принцип си во право Спион, но мислам дека поентата на неговата семинарска беше да го имплементира кодот што е внатре во strstr.

Респект, кога споредуваш индекси во array од карактери, ги споредуваш само индивидуалните карактери, не целите стрингови што почнуваат од тој индекс.
ТСМ има подобра идеја, само има многу грешки во програмата (еве за почеток ќе посочам неколку: условот во while никогаш нема да биде вистина ако zbor[0]!=podzbor[0], бидејќи променливата т не се инкрементира надвор од тој циклус; таквиот тест го прави for циклусот по променливата i бескорисен.


Алгоритмот би требало да работи отприлика вака:

1. Пронајди на кој индекс во zbor се наоѓа првата буква од podzbor;
2. Потврди дека сите букви после тој индекс се идентични во zbor и во podzbor (внимавај дека индексот во подзбор секогаш ќе се движи од 0 до dolzina(podzbor), додека индексот во zbor ќе започнува од вредноста што ќе ја пронајдеш во чекор 1.
3. Не заборавај дека podzbor може да се појави повеќе пати во збор, и дека може да има фрагменти во zbor што се фрагменти и во podzbor (како на пример ако бараш „ланец„ во „планина„ - „лан„ го има во двата зборови, но ланец го нема во планина).

Ај да не тупам, - ова е интересен проблем кој може да се реши на многу различни начини. Би ти препорачал да се потрудиш и да го решиш.

Код:
#include <string.h>
#include <stdio.h>

int main()
{
        char zbor[80], podzbor[80], *poz;
        printf("Vnesi zborn");
        scanf("%s",zbor);
        printf("Vnesi podzborn");
        scanf("%s",podzbor);
        if ((poz = strstr(zbor, podzbor)))
        {
                printf("%s e podzbor na %s na pozicija %dn",
                                podzbor,zbor,poz - zbor + 1);
        }
        else { printf("%s ne e podzbor na %sn",podzbor,zbor); }
        return 0;
}
Забелешка: не е безбедно да се чита збор со scanf - програмот има buffer overflow.
 

elena_vol4ica

Intern
24 април 2008
21
0
Код:
#include <string.h>
#include <stdio.h>

int main()
{
        char zbor[80], podzbor[80], *poz;
        printf("Vnesi zborn");
        scanf("%s",zbor);
        printf("Vnesi podzborn");
        scanf("%s",podzbor);
        if ((poz = strstr(zbor, podzbor)))
        {
                printf("%s e podzbor na %s na pozicija %dn",
                                podzbor,zbor,poz - zbor + 1);
        }
        else { printf("%s ne e podzbor na %sn",podzbor,zbor); }
        return 0;
}
Забелешка: не е безбедно да се чита збор со scanf - програмот има buffer overflow.
Пред да даваш вакви коментари, треба малку подобро да го разгледаш кодот - како прво, scanf() навистина може да се искористи како format string overflows, но кодот има и една друга функција која е уште поопасна и полесна за експлоатација а се работи за stack overflow. Како 2, не верувам кога се работи за некој проект да се прави со збирање на кодови од различни автори да прескокнат важен чекор - vulnerability fuzzing, а при тоа секако ќе се открие пропустот. Значи, коментарот е џабе.
 

Aleks

Gaining Experience
18 мај 2007
5,748
288
elena_vol4ica, следен пати види ја датата на последниот пост.

И дајте малце, зборуваме за програма која сигурно е дадена од некој професор, нема шанси некој да седне дома и да размислува за правење на експлоит за неа.
 

Нови мислења

Последни Теми

Статистика

Теми
43,530
Мислења
822,725
Членови
28,053
Најнов член
ro0tkid
На врв Дно