Olen 2 viikkoa pähkäillyt näitä, ja nyt murruin.
1. Olen kokeillut seuraavaa ehtolausetta vaikka kuinka monessa muodossa, mutta se ei vain kerta kaikkiaan mene läpi:
if(chars[i - 97] == text.substr(-1, 1) || chars_caps[i - 97] == text.substr(-1, 1)) SDL_Delay(50);
Elikkäs tein funktion, joka kirjoittaa muuttujaan tekstiä näppäimien painalluksesta.
Rumasti laitoin kirjaimet a-z chars-taulukkoon ja A-Z chars_caps-taulukkoon.
Joten ylläoleva koodi tarkistaa, onko viimeiseksi kirjoitettu kirjain sama kuin mitä nyt ollaan kirjoittamassa. -Jos on, niin odotetaan eeettttttteeeeeeiiiiii tulisi tuollaista tekstiä.
2. Oikeastaan en viitsi edes koodia tähän laittaa, koska en osaa selittää sitä. ^^
Sellainen kysymys vain olisi, että onko olemassa opassivua, missä kerrotaan suomeksi substr:stä, erasesta, jne. hyvin yksityiskohtaisesti, ettei minunlaiselleni urpolle jää mitään epäselväksi.
-Tätä pyydän vain, koska olen varmaan kuluttanu puolet C++-manuaalisivun manuskasta ymmärtämättä sen kaikkea tietoa.
Ja olen sitten ihan tosissani pari viikkoa pohtinut tuota ykköstä, ettette vain saisi sellaista käsitystä että ekan errorin jälkeen heti tänne ryntään. :D
1. Kannattaisi pelkän pohtimisen lisäksi katsoa, miten substr-funktio toimii. Ensimmäinen parametri on etumerkitön, joten -1 tuottaa muunnoksessa suurimman mahdollisen luvun. Olisit voinut myös ohjelman tulosteesta todeta, että tuloksena on std::out_of_range-tyyppinen poikkeus, mistä tiedätkin heti, että parametrit eivät ole sallitulla lukuvälillä.
terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr Aborted
2. Funktioita tuskin on kovin hyvin suomeksi listattu, mutta http://www.cplusplus.com/reference/ ja http://www.cppreference.com/wiki/ sisältävät minusta varsin ymmärrettävät selitykset englanniksi. Useimmissa funktioissa ei ole yhtään mitään ihmeellistä. (Tarkoitus olisi joskus kirjoittaa noista Ohjelmointiputkaan, mutta on aika paljon tärkeämpääkin tekemistä.)
Metabolix kirjoitti:
1. Kannattaisi pelkän pohtimisen lisäksi katsoa, miten substr-funktio toimii. Ensimmäinen parametri on etumerkitön, joten -1 tuottaa muunnoksessa suurimman mahdollisen luvun. Olisit voinut myös ohjelman tulosteesta todeta, että tuloksena on std::out_of_range-tyyppinen poikkeus, mistä tiedätkin heti, että parametrit eivät ole sallitulla lukuvälillä.
terminate called after throwing an instance of 'std::out_of_range' what(): basic_string::substr Aborted
Kiitos. :)
Mutta, kuten sanoin, olen kokeillut tuota vaikka kuinka monessa muodossa, eli tällainenkaan viritys ei toimi:
text.substr(text.length() - 1, 1)
Metabolix kirjoitti:
2. Funktioita tuskin on kovin hyvin suomeksi listattu, mutta http://www.cplusplus.com/reference/ ja http://www.cppreference.com/wiki/ sisältävät minusta varsin ymmärrettävät selitykset englanniksi. Useimmissa funktioissa ei ole yhtään mitään ihmeellistä. (Tarkoitus olisi joskus kirjoittaa noista Ohjelmointiputkaan, mutta on aika paljon tärkeämpääkin tekemistä.)
Juu, juuri tuota referenceä olen selannut kuten mainitsin.
Ja vaikka olenkin kohtuullinen englannissa omasta mielestäni, sanoja menee sieltä täältä yli hilseen, eikä sanakirjat auta.
Joten tuohon ykköseen...
Näinkin nyypän kysymyksen joudun esittämään, että miten asetetaan muuttujan arvoksi toisen muuttujan viimeinen kirjain, kun tuo ylempi härpäkekkään ei toimi? :D
-Olen ihan tosissani kokeillut vaikka mitä tähän, mutta ei. :/
Kiitos. :)
Edit: Korjasin ajatukisssani kirjoittaneeni koodinpätkän.
Viimeinen kirjain on tyyppiä char
, mutta substr
-metodi palauttaa std::string
-olion.
char c; std::string mjono = "asdfg"; // Kaikki seuraavat asettavat c:hen mjono:n viimeisen kirjaimen c = mjono[mjono.length()-1]; c = mjono.at(mjono.length()-1); c = *--mjono.end(); c = mjono.substr(mjono.length()-1,1)[0];
Kiitos, os! :)
Tuo viimeinen näyttää ainoalta minkä suurimmaksi osaksi ymmärrän, mutta mitäs tuo lihavoitu osa tuossa tarkoittaa:
c = mjono.substr(mjono.length()-1,1)[0];
Mut pitääpä kokeilla... :)
Edit: Nyt sain toimimaan! Jeah! *mahtava fiilis* Kiitos Metabolix ja os! :D
Merkkijonot ovat merkkitaulukoita, joten tuossa [0] viittaa (substr-metodilta saadun) merkkijonon ensimmäiseen kirjaimeen. Ensimmäisessä vaihtoehdossa taasen viitataan suoraan (alkuperäisen) merkkijonon viimeiseen kirjaimeen.
Aihe on jo aika vanha, joten et voi enää vastata siihen.