• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sprawdzenie czy podane słowo znajduje się w innym słowie.

Object Storage Arubacloud
0 głosów
649 wizyt
pytanie zadane 17 marca 2017 w C i C++ przez Sensej Użytkownik (540 p.)
Witam.

Mam do zrobienia zadania, w którym mam sprawdzić czy podane słowo z klawiatury znajduje się we wcześniej wpisanym słowie.(np. STOkrotka) Mogą to być duże, małe znaki, oraz kilka słów, a do zrobienia mam użyć pętli zagnieżdżonych.

Ogólny pomysł mam taki, aby zrobić dwie pętle for. Zewnętrzna przechodzi po literach drugiego słowa podanego z klawiatury, a wewnętrzna pętla po literach pierwszego słowa, w którym mam sprawdzić czy jest w nim słowo podanego z klawiatury. Potem porównywać kolejno litery i jak znajdzie dwie te same litery to przechodzi na nastepne. Tylko nie wiem jak zapisać warunki we wnętrzu pętli.

3 odpowiedzi

0 głosów
odpowiedź 17 marca 2017 przez mokrowski Mędrzec (155,460 p.)
wybrane 17 marca 2017 przez Sensej
 
Najlepsza

Ogólnie, są szybsze algorytmy przeszukiwania. Ale jak była jasna sugestia że mają być w pętle, to w zasadzie jest tylko 1 wyjście:

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

char* stringFind(const char *msg, const char *msubstr) {
    /* Nie chcę naruszać przekazanego wskaźnika */
    char *str = (char *)msg;

    while(*str) {
        char *start = str;
        char *pattern = (char *)msubstr;

        /* Jeśli znaleziono 1 znak wzorca, sprawdź dalszą jego część */
        while((*str) && (*pattern) && (*str == *pattern)) {
            ++str;
            ++pattern;
        }
        /* Jeśli znaleziono cały wzorzec, zwróć wskaźnik jego początku */
        if(!(*pattern)) {
            return start;
        }
        /* Postęp w pozycji przeszukania */
        str = start + 1;
    }
    /* Sygnalizacja braku dopasowania */
    return NULL;
}

int main() {
    char msg[] = "In the Rabbit hole";
    char substr[] = "the";

    /* Wskaźnik na początek napisu */
    char * matched = stringFind(msg, substr);
    if(matched == NULL) {
        fprintf(stderr, "String |%s| not matched in |%s|\n", substr, msg);
        return EXIT_FAILURE;
    }
    printf("Matched string started at: |%s|\n", stringFind(msg, "the"));

    return EXIT_SUCCESS;
}

 

0 głosów
odpowiedź 17 marca 2017 przez Magicone Nałogowiec (45,100 p.)

Zamiast kombinować, nie lepiej użyć std::string::find?

if (s1.find(s2) != std::string::npos) {
    std::cout << "found!" << '\n';
}

 

komentarz 17 marca 2017 przez Sensej Użytkownik (540 p.)
Z pewnością byłoby łatwiej i tak chciałem zrobić, ale w poleceniu jest napisane, aby użyć pętli zagnieżdżonych.
0 głosów
odpowiedź 17 marca 2017 przez Ehlert Ekspert (212,670 p.)
Bardzo kiepski przykład jak na przedstawienie użycia pętli zagnieżdżonych. Wystarczy jeden for i substr.

Podobne pytania

0 głosów
4 odpowiedzi 289 wizyt
pytanie zadane 9 października 2018 w C i C++ przez Karolus Użytkownik (510 p.)
+1 głos
0 odpowiedzi 347 wizyt
pytanie zadane 29 października 2017 w C i C++ przez jacekk024 Użytkownik (620 p.)
0 głosów
1 odpowiedź 353 wizyt

92,552 zapytań

141,399 odpowiedzi

319,534 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...