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

[C++] - Wyszukiwanie więcej niż jednego wzorca w danej zmiennej.

Object Storage Arubacloud
0 głosów
609 wizyt
pytanie zadane 9 stycznia 2016 w C i C++ przez xCodezaur Bywalec (2,850 p.)
edycja 16 stycznia 2016 przez xCodezaur

Witam,

Czy da radę odszukać więcej niż jeden fragment w danym tekście ? Przykładowo znaleźć w tekście domenę ".pl" albo ".com".

#include <iostream>

using namespace std;

string tresc;
int pozycja;
int x;

int main()
{
    cout << "Podaj tresc: ";
    getline(cin,tresc);

    cout << endl;

    x = tresc.length();

    pozycja = tresc.find((".pl") || (".com"));

    if (pozycja!=string::npos)
    {
        tresc.replace(0,x,"***CENZURA***");
        cout << "Niedozwolone slowo!" << endl << endl;
    }

    cout << "CHAT: " << endl << endl;;
    cout << tresc << endl;

    return 0;
}

Tutaj przykładowo próbowałem sposobem "||" (lub), który nie przyniósł żadnych efektów.

Może są jakieś inne funkcje wyszukujące kilka fragmentów w danym wyrazie, lub po prostu nie ma na to sposobu.

Z góry dziękuje za poświęcenie czasu na odpowiedź smiley

2 odpowiedzi

+1 głos
odpowiedź 9 stycznia 2016 przez Patrycjerz Mędrzec (192,320 p.)
wybrane 9 stycznia 2016 przez xCodezaur
 
Najlepsza

Skorzystaj po prostu z metody find kilka razy.

komentarz 9 stycznia 2016 przez xCodezaur Bywalec (2,850 p.)
Musiałbym kilka razy wprowadzać też ifa sprawdzającego czy znaleziono fragment na pozycji. Bo jeśli został by tylko jeden, to brało by pod uwagę tylko ostatniego find'a.
komentarz 9 stycznia 2016 przez Patrycjerz Mędrzec (192,320 p.)
Stwórz więc specjalną funkcję.
komentarz 9 stycznia 2016 przez xCodezaur Bywalec (2,850 p.)
Nie rozumiem, i w tej funkcji umieścić tyle ifów czy wtedy nie będzie konieczności umieszczania ich tyle razy ? Myślę, że jeśli trzeba użyć tyle razy ifów to bez sensu, bo jak bym chciał sprawdzić 30-50 fragmentów ?
komentarz 9 stycznia 2016 przez Patrycjerz Mędrzec (192,320 p.)

Wtedy korzystasz z pętli, a dane do funkcji trzymasz np. w tablicy. Ogólnie nie trzeba tworzyć tej funkcji (ale warto dla czytelności kodu) - zaprezentuję więc przykład bez niej:

std::string tekst = "www.mojastrona.pl";
const int wielkosc_tablicy = 3;
std::string tablica[wielkosc_tablicy] = {".pl", ".com", ".org"};
for(int i = 0; i < wielkosc_tablicy; i++)
{
	int pozycja = tekst.find(tablica[i]);
	if(pozycja != std::string::npos)
		std::cout << "Uwaga, znaleziono \"" << tablica[i] << "\"" << std::endl;	
}

Wyjście:

Uwaga, znaleziono ".pl"

komentarz 9 stycznia 2016 przez xCodezaur Bywalec (2,850 p.)

Szczerze mówiąc właśnie teraz, jeszcze nie zerkając na forum też wpadłem, aby zrobić to w pętli i się udało :).

#include <iostream>

using namespace std;

string zakazane[2]={".pl",".com"};
string tresc;
int pozycja;
int x;

int main()
{
    cout << "Podaj tresc: ";
    getline(cin,tresc);

    cout << endl;

    x = tresc.length();

    for(int i=0; i<2; i++)
    {
        pozycja = tresc.find(zakazane[i]);

        if (pozycja!=string::npos)
        {
            tresc.replace(0,x,"***CENZURA***");
            cout << "Niedozwolone slowo!" << endl << endl;
        }
    }

        cout << "CHAT: " << endl << endl;;
        cout << tresc << endl;

    return 0;
}

Dzięki za odpowiedź i tak przy okazji, to co oznacza te const przed intem ?

komentarz 9 stycznia 2016 przez Patrycjerz Mędrzec (192,320 p.)
Tworzy stałą (w przeciwieństwie do zmiennej, jej wartości nie można zmieniać).
komentarz 9 stycznia 2016 przez xCodezaur Bywalec (2,850 p.)
Ok, dzięki na pewno się przyda :)
+1 głos
odpowiedź 9 stycznia 2016 przez Colossus Mądrala (6,410 p.)
komentarz 9 stycznia 2016 przez xCodezaur Bywalec (2,850 p.)
O widzisz, to we dwóch na tym temacie skorzystaliśmy :)
komentarz 9 stycznia 2016 przez Colossus Mądrala (6,410 p.)
Musisz sobie odpowiedzieć na pytanie: Chcesz znać nazwy funkcji, czy algorytm? Ja jestem zwolennikiem pisania własnych funkcji.. Jak widzę pytanie "Jak zamienić string na int" to po prostu.. :/
komentarz 9 stycznia 2016 przez xCodezaur Bywalec (2,850 p.)
Na razie za wcześnie na takie pytanie, a z twojego programu nie wiedziałem paru rzeczy pokroju "return true", w pętli "j", w pętli "k", oraz używania "++k" zamiast "k++". Może "return true" jeszcze bym zrozumiał, zwraca się jeśli prawda, lecz reszty jeszcze nie miałem okazji poznać. Na razie uczę się z kursu Pana Mirosława i jestem obecnie na 9 odcinku.
komentarz 9 stycznia 2016 przez Colossus Mądrala (6,410 p.)
return true - zwraca prawdę. Nawiązując do programu, jeśli znajdzie w tekście ".pl" to wychodzi z funkcji i zwraca prawdę, czyli dalej już nie szuka czy jest ".com" lub ".net"

++k - zwiększ zmienną k o 1, później sprawdź warunek

k++ - sprawdź warunek, później zwiększ zmienną k o 1
komentarz 9 stycznia 2016 przez xCodezaur Bywalec (2,850 p.)
O dzięki, kiedyś własnie potrzebowałem, aby się tak działo, ale jeszcze tego nie znałem. A tak w ogóle to w pętli for może być obojętna literka czy zawsze musi to być albo "i" albo "j" albo "k" ?

Podobne pytania

+3 głosów
4 odpowiedzi 240 wizyt
pytanie zadane 3 lipca 2017 w Sprawy forum przez kordix Gaduła (3,910 p.)
0 głosów
1 odpowiedź 400 wizyt
pytanie zadane 28 maja 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)
0 głosów
1 odpowiedź 129 wizyt
pytanie zadane 25 marca 2020 w C i C++ przez AlpenGod Nowicjusz (170 p.)

92,580 zapytań

141,432 odpowiedzi

319,664 komentarzy

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

...