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

Wskaźniki i operacje na tablicy znaków

Object Storage Arubacloud
0 głosów
210 wizyt
pytanie zadane 12 kwietnia 2022 w C i C++ przez xTMx3 Obywatel (1,560 p.)

Witam, 

niedawno na mojej uczelni ruszyliśmy z tematem wskaźników. Dostałem do napisania zadanie polegające na dopisaniu "zawartości" kilku funkcji, jednak podkreślono, że elementem wymaganym w tych zadaniach jest użycie wskaźników. Jedna z tych właśnie funkcji sprawia mi kłopot i nie mam żadnego pomysłu jak sobie z tym poradzić i to pomimo tego, że wygląda na dosyć prostą. 

Mianowicie, ma być to funkcja, która "Wyznacza wskazanie na pierwsze wystąpienie podanego znaku c w tablicy s zawierającej napis."

Tak wygląda jeden z moich pomysłów na tę funkcję w chwili obecnej: 

char * chr_str_pos(char c, char * s)
{
    for(; *s != '\0'; ++s)
    {
        if(*s == c)
        {
            // ???
        }
        else
        {
            return 0;
        }
    }
}

W miejscu gdzie wstawiłem trzy znaki zapytania pojawia się mój problem, bo nie mam pojęcia co powinno tam być. Próbowałem wpisać tam return s; ale kiedy tak robię, to funkcja nie działa poprawnie i nie wyświetla wyniku, również return *s; sprawdzałem, ale to też jest niepoprawnie i w ogóle pokazuje się przy tym na czerwono błąd.

Inną moją myślą było coś w tym stylu: 

char * chr_str_pos(char c, char * s)
{
    int pozycja = 0;

    for(; *s != '\0'; ++s)
    {
        pozycja++;

        if(*s == c)
        {
            break;
        }
    }
    return pozycja;
}

Jednakże nie mam żadnego pomysłu jak to zmienić na taką wersję w której pozycja nie jest intem no i żeby działało. 

Stąd moje pytanie, czy mógłby ktoś pomóc mi z tym i jakoś nakierować mnie na właściwe rozwiązanie?

Będę wdzięczny za wszelkie podpowiedzi. 

2 odpowiedzi

+1 głos
odpowiedź 12 kwietnia 2022 przez adrian17 Ekspert (344,860 p.)
wybrane 21 kwietnia 2022 przez xTMx3
 
Najlepsza

Pierwsze wygląda trochę sensowniej. Problem nie jest w używaniu wskaźników, a w logice.

Wrzucam kod bez poprawek, ale z komentarzami:

    for(; *s != '\0'; ++s) // OK
    {
        if(*s == c) // OK
        {
            // skoro znak pasuje, to powinienes zwrocic
            // wartosc wskaznika wskazujacego na ten znak
            // czyli po prostu s
        }
        else
        {
            return 0; // to jest zle - jesli pierwszy znak nie jest rowny c, to od razu wychodzisz z funkcji
        }
        // <- jesli petla sie skonczy bez znalezienia znaku, to musisz cos zwrocic
    }

 

komentarz 15 kwietnia 2022 przez xTMx3 Obywatel (1,560 p.)
Dziękuję za odpowiedź, jak tylko wrócę po świętach do domu, to poprawię to i dam znać czy wyszło.
komentarz 21 kwietnia 2022 przez xTMx3 Obywatel (1,560 p.)

@adrian17, poprawiłem ten (jak tak teraz patrzę) głupi błąd i działa jak należy. Dziękuję za pomoc. 

+1 głos
odpowiedź 12 kwietnia 2022 przez tangarr Mędrzec (154,780 p.)
Twój pierwszy pomysł idzie w dobrą stronę. Gdybyś nauczył się korzystać z debuggera to szybko byś zauważył, że w przypadku gdy szukany znak nie znajduje się na pierwszym miejscu tablicy to wskakujesz w tego nieszczęsnego "elsa" i kończysz pracę funkcji. Pętla powinna kontynuować pracę aż do znalezienia znaku końca napisu i tylko w tej sytuacji powinieneś zwracać NULL.
komentarz 15 kwietnia 2022 przez xTMx3 Obywatel (1,560 p.)
Dziękuję za odpowiedź, tak jak odpisałem w komentarzu do odpowiedzi powyżej, po powrocie do domu po świętach poprawię to według podpowiedzi i dam znać jak wyszło.

A co do debuggera, nigdy go nie używałem i szczerze mówiąc, poza tym co można wywnioskować z samej nazwy, nie bardzo wiem do czego jeszcze w ogóle służy. Istnieje gdzieś w internecie jakaś stronka / filmik gdzie korzystanie z tego jest dobrze wytłumaczone? (jak poszukałem przed chwilą na YouTube to wyskoczyło dosyć sporo filmików o tym, ale nie chciałbym trafić na taki, w którym coś jest mówione nie tak, albo w sposób który tylko namiesza mi w rozumowaniu)
1
komentarz 15 kwietnia 2022 przez tangarr Mędrzec (154,780 p.)
Debugger pozwala na śledzenie wykonania twojego programu instrukcja po instrukcji. Dzięki niemu możesz sprawdzić aktualne wartości zmiennych.
Zintegrowane środowiska programistyczne (czytaj IDE) prawie zawsze mają w sobie wsparcie dla debuggera. Dzięki czemu nie musisz sterować nim ręcznie z konsoli. Wystarczy, że zaznaczysz w swoim kodzie pułapkę (breakpoint) i uruchomisz program w trybie debugowania. Gdy program natrafi na pułapkę to wstrzyma swoje wykonanie. Debugger pokaże ci w którym miejscu program został wstrzymany, wartości zmiennych lokalnych oraz stos wywołań funkcji.
Podczas szukania informacji o debuggerze dodaj nazwę swojego środowiska programistycznego.
komentarz 17 kwietnia 2022 przez xTMx3 Obywatel (1,560 p.)
Brzmi jak całkiem spore ułatwienie. Dzięki za podpowiedź, na pewno poszukam i spróbuję ogarnąć.
komentarz 17 kwietnia 2022 przez Oscar Nałogowiec (29,290 p.)
Nauka używania debuggera to powinna być jedna z pierwszych rzeczy w nauce programowania. W momencie gdy programy zaczynają się rozejścia, pętle i zmienne jest już właściwy moment.
komentarz 21 kwietnia 2022 przez xTMx3 Obywatel (1,560 p.)

@tangarr, poprawiłem funkcję według wskazówek i działa. Dziękuję za pomoc  

komentarz 21 kwietnia 2022 przez xTMx3 Obywatel (1,560 p.)

@Oscar, gdybym wiedział o nim wcześniej pewnie bym go próbował używać. Ale niestety w tych materiałach których używałem do nauki, ani też na uczelni / w technikum nigdy o nim nie wspomniano. 

Podobne pytania

0 głosów
2 odpowiedzi 351 wizyt
pytanie zadane 24 listopada 2018 w C i C++ przez eSpring Początkujący (270 p.)
0 głosów
2 odpowiedzi 1,017 wizyt
pytanie zadane 28 września 2018 w C i C++ przez eSpring Początkujący (270 p.)
0 głosów
1 odpowiedź 486 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...