• 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(??)

0 głosów
1,847 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 VIP (148,260 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 VIP (148,260 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,810 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,810 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,810 p.)
Obadaj Qt
komentarz 2 stycznia 2019 przez mokrowski VIP (148,260 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ź 151 wizyt
pytanie zadane 19 lipca 2017 w C i C++ przez Jakub 0 Pasjonat (23,100 p.)
0 głosów
1 odpowiedź 672 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Przypadek Początkujący (420 p.)
0 głosów
2 odpowiedzi 441 wizyt
pytanie zadane 24 czerwca 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,620 p.)

88,701 zapytań

137,307 odpowiedzi

306,729 komentarzy

58,891 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...