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

C++ wyszukiwanie litery w zmiennej string za pomocą zmiennej char(??)

VPS Starter Arubacloud
0 głosów
3,001 wizyt
pytanie zadane 1 stycznia 2019 w C i C++ przez Drax658 Nowicjusz (120 p.)

Witam wszystkich!

Piszę ponieważ mam problem z którym nie mogę sobie poradzić.

Otóż piszę w C++ ( a raczej C++/CLI) program na zasadzie wisielca, który pan Mirek pisał w tutorialu Java Script.

Wszystko szło dobrze ale wyłożyłem się na funkcji która sprawdza czy kliknięta litera znajduje się w haśle i ją podmienia. zrobiłem coś takiego:     

   char litera;
        litera = litera1->Text[0];
        dlugosc_2 = haslo_1.length();
        
               
        for (int i = 0; i < dlugosc_2; i++)
        {
            if (haslo_1[i] == litera)
            {
                haslo_2[i] = litera;
                //String ^haslo_4 = gcnew String(haslo_2.c_str());
                //haslo->Text = haslo_4;
            }
        }

Problem w tym że if nie sprawdza poprawnie kiedy po "==" znajduje się zmienna, gdy wstawię tam pojedynczy znak wszystko zaczyna działać (literka jest wstawiana ze zmiennej i nie trzeba tam znaku).

Moje pytanie brzmi: jak zmusić program by sprawdzał czy na i-tej pozycji w stringu znajduje się litera, która jest zapisana w zmiennej char? Ewentualnie może macie jakieś pomysły jak do tego podejść i sobie z tym poradzić?

Dzięki wielkie i pozdrawiam!

2 odpowiedzi

+1 głos
odpowiedź 1 stycznia 2019 przez mokrowski Mędrzec (155,460 p.)
Dlaczego nie użyjesz .find(...) ? https://en.cppreference.com/w/cpp/string/basic_string/find

Znajdzie Ci pozycję w napisie i zwróci indeks wystąpienia.
komentarz 1 stycznia 2019 przez niezalogowany
edycja 2 stycznia 2019
String z C++/CLI też ma takie bajery?
komentarz 1 stycznia 2019 przez mokrowski Mędrzec (155,460 p.)
A po co mocować się od razu z System::String (bo przyjmuję że ktoś kto używa CLI czyli Managed Code wie po co to robi). Można zrobić to na zwykłym std::string i zmienić na System::String do wyświetlania/serializacji/... czegoś_tam...
komentarz 2 stycznia 2019 przez Drax658 Nowicjusz (120 p.)

@mokrowski, popraw mnie jeśli się mylę ale find znajdzie mi na której pozycji znajduje się litera ale jej nie pomnieni (w programie hasło jest zakryte i literka ma się w nim pojawić czyli znak '-' ma zostać zastąpiony np literą 'a'

komentarz 2 stycznia 2019 przez VirtualMember Pasjonat (15,790 p.)
ale jak już znasz pozycję no to co stoi na przeszkodzie by to podmienić?

+1
komentarz 2 stycznia 2019 przez Drax658 Nowicjusz (120 p.)
Ty kurde, faktycznie to nie głupie. Tylko pytanie czy w funkcji find muszę wpisać znak jakiego szukam (np. 'a') czy mogę podesłać jej stałą, która zawiera ten znak bo to ważne.
komentarz 2 stycznia 2019 przez VirtualMember Pasjonat (15,790 p.)
Jeśli nie wiesz to przetestuj to sam ;)
komentarz 2 stycznia 2019 przez Drax658 Nowicjusz (120 p.)
Kurcze chyba pomogliście mi uniknąć potężnej redundancji w kodzie  dziekuje bardzo . Kurcze ale jest to pierwszy i ostatni program, ktory piszę w C++/CLI. Moze przy okazji polecicie jakiś program do pisania okienek w czystym C++?
komentarz 2 stycznia 2019 przez VirtualMember Pasjonat (15,790 p.)
Obadaj Qt
komentarz 2 stycznia 2019 przez mokrowski Mędrzec (155,460 p.)
C++ Managed w MS Windows to mało trafiony pomysł.

Twój program można jeszcze bardziej pozbawić redundancji z użyciem std::transform. To już jednak sam doczytaj. Ja z propozycją odnosiłem się wyłącznie do pomysłu w Twoim kodzie.

Do pracy w czystym C++ nadaje się Visual Studio Code lub ew. całe środowisko/framework Qt z IDE Qtcreator,
0 głosów
odpowiedź 1 stycznia 2019 przez DragonCoder Nałogowiec (36,500 p.)
1. Pobierasz litere i zapisujesz w zmiennej

2. Przypisujesz do zmiennej unsigned char dlugosc slowa

3. Tworzysz petle, ktora powtarza sie od zera do dlugosci slowa - 1 (iteracyjna)

4. W petli sprawdasz, czy dany elemnt slowa string_ [i] == znakowi

5. Jesli tak, to mozesz dodac punkt, jesli nie to wraca do poczatku petli i od nowa wpisujesz jeden znak.

6. litera1->Text[0] co to za zapis?
komentarz 2 stycznia 2019 przez Drax658 Nowicjusz (120 p.)
Litera1 to nazwa przycisku w programie, a w text umieszczony jest napis jaki się w nim znajduje. W moim programie są przyciski, które tworzą klawiaturę kliknięcie jednego ma właśnie sprawdzić czy zawarta w nim litera znajduje się w haśle i to mi nie działa. Bo pobrana litera z przycisku do zmiennejn nie porównuje się z konkretnym indeksem w haśle.
komentarz 2 stycznia 2019 przez DragonCoder Nałogowiec (36,500 p.)

Zrobilbym to tak, nie wiem czy jest to dobre, jest to prymitywna opcja, bo jak ktos wspomnial jest funkcja find(), chociaz mysle, ze jeszcze inna moze by sie znalazla.

myWord = "";
findWord = ""

    word_length
    = myWord.length();

while (findWord != "-"){
for (j = 0; j < wordLength; j++) {
    findWord += "-";
}

std::cin >> character;

for (i = 0; i < wordLength; i++) {
    if (myWord[i] == character) {
        findWord[i] == character;
    }
    else {
    }
}
}

Cos w tym stylu

Podobne pytania

0 głosów
1 odpowiedź 267 wizyt
pytanie zadane 19 lipca 2017 w C i C++ przez Jakub 0 Pasjonat (23,120 p.)
0 głosów
1 odpowiedź 889 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Przypadek Początkujący (420 p.)
0 głosów
2 odpowiedzi 492 wizyt
pytanie zadane 24 czerwca 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...