Nowe posty

Autor Wątek: find_first_of  (Przeczytany 1222 razy)

KelThuzad

  • Gość
find_first_of
« dnia: 2016-07-28, 17:26:45 »
Witam ze strony http://www.cplusplus.com/reference/string/string/find_first_of/ wziąłem do mojego programu funkcje find_first_of ale nie rozumie paru kwestii:
#include <iostream>       // std::cout
#include <string>         // std::string
#include <cstddef>        // std::size_t

int main ()
{
  std::string str ("Please, replace the vowels in this sentence by asterisks.");
  std::size_t found = str.find_first_of("aeiou");
//  std::cout << std::string::npos  << '\n';

//  std::cout << "liczba z size_t " << found << std::endl;
  while (found!=std::string::npos)
  {
    str[found]='*';
    found=str.find_first_of("aeiou",found+1);
  }

  std::cout << str << '\n';

  return 0;
}
I teraz mam takie pytania:
1) Size_t to zmienna(??) która zwraca rozmiar. I w linijce std::size_t found = str.find_first_of("aeiou"); found ma wartość 2 ponieważ na drugiej pozycji w stringu znajduje się nasz poszukiwany znak(z tego co pamiętam stringi liczy się tak jak tablica od 0)?

2)Później sprawdzamy whila czy found jest końcem stringu? I tu mam pytanie jeszcze do std::string::npos po wpisaniu std::cout << std::string::npos  << '\n'; wyskakuje mi liczba 4294967295?????

3) Teraz przechodzimy do str[found]='*'; i zmieniamy nasz pierwszy found (który ustaliliśmy poza pętlą) że zmieniamy do na gwiazdkę.

4) I tu pojawiają się moje problemy: found=str.find_first_of("aeiou",found+1); Wiem że szukamy następnego znaku który odpowiada temu wyrażeniu "aeiou". Powiedzmy następna szukana litera znajduje się na pozycji 3 to po co mamy tu found+1???????

Wszystkie linie które są w komentarzach dodałem by się dowiedzieć co było w poszczególnych zmiennych.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3056
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Odp: find_first_of
« Odpowiedź #1 dnia: 2016-07-28, 22:10:02 »
Odpowiedzi na wszystkie twoje pytania są na portalu z którego korzystasz.

1. size_t to typ zmiennej. Jak wszystko, co kończy się na _t.
2. Dokumentacja dokładnie wyjaśnia, co to jest stała string::npos, a dokumentacja find_first_of zawiera informację, kiedy - jako wynik wyszukiwania - zwracana jest ta stała.
3. Brak pytania
4. Rozpisz sobie w tabeli na kartce kolejne iteracje pętli, w kolumnach daj kolejne zmienne, w wierszach ich wartości w kolejnych przebiegach, aż do zakończenia pętli. To powinno ci wskazać, czemu w wywołaniu jest found+1 i co by się stało, gdyby było samo found. Jako podpowiedź - zobacz co by się stało, gdybyś zakomentował linijkę wstawiającą gwiazdkę.

W czasach, gdy uczyłem programowania, symulowanie programu na kartce/tablicy było jednym z ćwiczeń pozwalających zrozumieć życie wewnętrzne algorytmów. Przydatnym akcesorium do takiej zabawy w domu jest biała tablica o rozmiarze A4/A3 i cienkie pisaki. Przy bardziej złożonych algorytmach pokreślona kartka robi się zbyt szybko nieczytelna.
« Ostatnia zmiana: 2016-07-29, 08:05:30 wysłana przez Paweł Kraszewski »
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy