Pokaż wyniki 1 do 6 z 6

Temat: Szukanie tekstu w tablicy

  1. #1
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie Szukanie tekstu w tablicy

    Funkcja porównuje dwie tablice. Jeżeli tekst zawarty w tej podanej jako drugi
    argument znajduje się gdziekolwiek w tablicy podanej jako pierwszy argument, to funkcja ma zwracać 1. W innym wypadku zwraca 0. Problem jest taki. Jeżeli np. taki program:
    Kod:
    //tutaj ta funkcja
    main()
    {
    char buf[] = { "oabcaslelekoef" } ;
    char buf2[] = { "abc" } ;
    cout << tablewordsearch(buf, buf2) ;
    }
    To zwraca 1.
    W przypadku kiedy do drugiej tablicy wrzucimy "asl", to wtedy zwraca 0, mimo że taki tekst występuje w tablicy 1 Ktoś wie, co tu jest "be"?
    Oto funkcja:
    Kod:
    int tablewordsearch(char buf1[], char buf2[]) {
    long size1 = sizeof(buf1) / sizeof(char) ;
    long size2 = sizeof(buf2) / sizeof(char) ;
    
    for(int i = 0;i < (size1-1);i++) { // for1
    
    for(int g=0;g<(size2-1);g++) { //for2
    
    
    if(buf1[i+g] == buf2[g]) {
    
    if(g == (size2-2)) {
    return 1 ;
    	}
    continue ;
    			}
    else {
    break ;
    }
    							
    } // for2
    
    	
    } // for1
    
    return 0 ;
    }
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  2. #2
    Avatar Mandr4ke
    Mandr4ke jest offline Bez Teamowiec
    Zarejestrowany
    Oct 2008
    Skąd
    W Sieci !!!
    Postów
    282

    Domyślnie

    Żeby Ci nie było za łatwo to wytłumacz mi dlaczego :


    return 0 ;
    "Wszystkie komputery PC są kompatybilne, ale niektóre są kompatybilniejsze od innych... Twój jest zawsze mniej kompatybilny..."

  3. #3
    Avatar Ormi
    Ormi jest offline %x-%x-%x-%n
    Zarejestrowany
    Jul 2008
    Skąd
    Za twoimi plecami
    Postów
    351

    Domyślnie

    No return 0, dlatego, że jak główna pętla for się skończy, to znaczy, że nie ma w tablicy takiego tekstu. Gdyby był, to zgodnie z moim założeniem zostałoby wcześniej wykonane return 1... Tylko, że jak widać nie działa to tak "piknie"
    Black Coders | Hacking, Kernel, Linux, Operating Systems, Programming
    I otworzyła studnię Czeluści,
    a dym się uniósł ze studni jak dym z wielkiego pieca,
    i od dymu zaćmiło się słońce i powietrze.
    A z dymu wyszła szarańcza na ziemię,
    i dano jej moc jaką mają ziemskie skorpiony.
    (...)
    I dano jej nakaz aby nie zabijała,
    lecz aby przez pięć miesięcy cierpieli katusze...

  4. #4
    Avatar ⌂⌂⌂
    ⌂⌂⌂ jest offline Poison Null Byte %00
    Zarejestrowany
    Jul 2008
    Postów
    96

    Domyślnie

    abc oraz oab zwraca 1 ponieważ załapuje się do pierwszej pętli która..wykonuje się tylko 4 razy. size1 wynosi 4, pętla nie sprawdza więc całego ciągu, tylko 4 pierwsze znaki :>
    delete (z ang. skasuj) - w programowaniu obiektowym operator niszczący obiekty utworzone za pomocą operatora new (bądź dowolny obiekt, którego adres można pobrać).

  5. #5
    Avatar kaspsior
    kaspsior jest offline يحشطخبؤءفنو٢٥٣كهي
    Zarejestrowany
    May 2007
    Postów
    406

    Domyślnie

    ..................... ...
    Ostatnio edytowane przez kaspsior : 04-17-2012 - 22:47

  6. #6
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Troszkę skomplikowałeś sobie sprawę. Tak jak zostało to wyżej napisane, zmienne size1 oraz size2 mają wartość 4, przez co dalsza część traci sens. Poza tym sama funkcja jest napisana mało czytelnie, żeby nie powiedzieć dziwnie. Jeżeli rzeczywiście miałbym napisać taką funkcję, to zrobiłbym to w mniej więcej taki sposób:

    Kod:
    int tablewordsearch(char *buf1, char *buf2) {
      int i;
    
      for(i = 0; i < strlen(buf1) - strlen(buf2) + 1; i++) {
          if (buf1[i] == buf2[0]) {
            int x;
            for (x = 1; x < strlen(buf2); x++) {
              if (buf1[i + x] != buf2[x]) break;
            }
            if (x == strlen(buf2)) return 1;
          }
      }
      return 0;
    }
    Jednak nie ma potrzeby pisać czegoś, co jest już zrobione:

    Kod:
    cout<<(strstr(buf1, buf2) == NULL ? 0 : 1)<<endl;

Podobne wątki

  1. SZUKANIE SKRADZIONEGO LAPTOPA PO MAC'u
    By piotrek_g80 in forum Newbie - dla początkujących!
    Odpowiedzi: 21
    Autor: 01-02-2010, 20:39
  2. szukanie ip
    By gkrz in forum Wardriving
    Odpowiedzi: 5
    Autor: 05-16-2008, 13:17
  3. usuwanie indeksu tablicy
    By ironwall in forum C/C++
    Odpowiedzi: 2
    Autor: 12-08-2007, 13:52
  4. szukanie w google w nagłówkach <head>
    By gogulas in forum Google hacks
    Odpowiedzi: 1
    Autor: 10-30-2007, 22:03
  5. problem z odczytaniem pliku do tablicy.
    By kasona in forum C/C++
    Odpowiedzi: 1
    Autor: 12-30-2006, 18:41

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj