• 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
191 wizyt
pytanie zadane 1 stycznia 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 przez mokrowski VIP (112,660 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 przez niezalogowany
edycja 2 stycznia
String z C++/CLI też ma takie bajery?
komentarz 1 stycznia przez mokrowski VIP (112,660 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 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 przez VirtualMember Stary wyjadacz (11,890 p.)
ale jak już znasz pozycję no to co stoi na przeszkodzie by to podmienić?

+1
komentarz 2 stycznia 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 przez VirtualMember Stary wyjadacz (11,890 p.)
Jeśli nie wiesz to przetestuj to sam ;)
komentarz 2 stycznia 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 przez VirtualMember Stary wyjadacz (11,890 p.)
Obadaj Qt
komentarz 2 stycznia przez mokrowski VIP (112,660 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 przez DragonCoder Pasjonat (22,190 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 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 przez DragonCoder Pasjonat (22,190 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ź 97 wizyt
pytanie zadane 19 lipca 2017 w C i C++ przez Jakub 0 Stary wyjadacz (13,480 p.)
0 głosów
1 odpowiedź 325 wizyt
pytanie zadane 20 stycznia 2016 w C i C++ przez Przypadek Początkujący (420 p.)
0 głosów
2 odpowiedzi 369 wizyt
pytanie zadane 24 czerwca 2017 w C i C++ przez BinaryMan Stary wyjadacz (12,590 p.)
Porady nie od parady
Forum posiada swój własny serwer Discord, dzięki któremu będziesz mógł po prostu pogadać z innymi Pasjonatami lub zapytać o jakiś problem. Podstrona z chatem znajduje się w menu pod ikoną człowieka w dymku.IRC

67,107 zapytań

114,049 odpowiedzi

241,694 komentarzy

47,027 pasjonatów

Przeglądających: 254
Pasjonatów: 15 Gości: 239

Motyw:

Akcja Pajacyk

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

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

...