mArt1n Skrevet 22. april 2004 Del Skrevet 22. april 2004 Jeg trenger litt hjelp! Alt fungerer med bokstavene som blir gjort om til tall o.l. men når jeg skulle få 'hva faen' eller 'what the fuck' til å bli 'wtf' funka det ikke. Heller ikke med 'please' og 'vær så snill' til 'plz' Hva er feilen?? plz hjelp. #include <iostream> #include <string> using namespace std; string l33tisize(std::string const& s) { string ret = s; for(std::string::size_type pos = 0; pos < ret.size(); pos++) { if(ret[pos] == 'e' || ret[pos] == 'E') ret[pos] = '3'; if(ret[pos] == 'o' || ret[pos] == 'O') ret[pos] = '0'; if(ret[pos] == 'i' || ret[pos] == 'I') ret[pos] = '1'; if(ret[pos] == 't' || ret[pos] == 'T') ret[pos] = '7'; if(ret[pos] == 's' || ret[pos] == 'S') ret[pos] = '5'; if(ret[pos] == 'a' || ret[pos] == 'A') ret[pos] = '4'; if(ret[pos] == 'g' || ret[pos] == 'G') ret[pos] = '6'; if(ret[pos] == 'c' || ret[pos] == 'C') ret[pos] = '('; if(ret[pos] == 'what the fuck' || ret[pos] == 'hva faen') ret[pos] = 'wtf'; if(ret[pos] == 'please' || ret[pos] == 'vær så snill') ret[pos] = 'plz'; } return(ret); } #define M_buffersize 100 char buf[M_buffersize]; std::string readLine(std::istream& in = std::cin) { std::string ret; while(in.get(buf, M_buffersize)) ret.append(buf); in.clear(); in.ignore(); return(ret); } int main() { using namespace std; string s; cout << "Skriv inn det du vil ha i l33t: "; s = readLine(); cout << l33tisize(s) << endl; cout << "(Trykk enter for å avslutte)"; readLine(); return(0); } Takk på fårhånd Lenke til kommentar
søppel Skrevet 22. april 2004 Del Skrevet 22. april 2004 (endret) Kompileren din klager vel litt? (jeg vet den gjør det) Snakk litt med den først; hør hva den har å si. Hint: Char literals kontra string literals, altså ' kontra " Så kan du ta en tur innom her: http://www.cppreference.com/cppstring.html ..regner med at du har en bok.. (du må nesten ha det) Endret 22. april 2004 av søppel Lenke til kommentar
GeirGrusom Skrevet 23. april 2004 Del Skrevet 23. april 2004 Dette kan umulig fungere, Kan man bare sjekke strings med "==" da? Jeg tenker du må legge til litt "&" og "strcmp" der. Lenke til kommentar
søppel Skrevet 23. april 2004 Del Skrevet 23. april 2004 (endret) strcmp er C-ish, han bruker std::string som er C++-ish, så da har han funksjonene (metodene) jeg linker til i linken ovenfor tilgjengelig. Flere muligheter .. compare, find .. etc. Edit: Ja, std::string har en operator== definert for seg. Så man kan sjekke to std::string's med ==, men dette fungerer selvfølgelig dårlig i dette tilfellet. Så: std::string a = "a"; std::string b = "a"; cout << (a == b) << endl; // gir 1 (altså true) b = "b"; cout << (a == b) << endl; // gir 0 (altså false) ..men dette er som sagt ikke det han er ute etter. Endret 23. april 2004 av søppel Lenke til kommentar
Vial Skrevet 26. april 2004 Del Skrevet 26. april 2004 Jeg mener det vil funke hvis du skriver if(ret[pos] == "what the fuck" || ret[pos] == "hva faen") ret[pos] = "wtf"; ' ' er enkel char. Lenke til kommentar
søppel Skrevet 26. april 2004 Del Skrevet 26. april 2004 (endret) ' ' er enkel char. Jupp, altså typen char. ..men problemet blir da at ret[pos] returnerer typen char, og du sammenligner dette med char const*. (altså tekst i gåseøyne er typen char const*) Situasjonen blir det samme som å gjøre dette: char a1 = 'a'; char const* a2 = "a"; cout << (a1 == a2) << endl; error: ISO C++ forbids comparison between pointer and integer ..ganske forståelig. Nei, man må bruke noen av memberfunksjonee til std::string som jeg hintet/linket til tidligere. Edit: Hvis ingen finner løsningen kan jeg altids paste ...? :} Endret 26. april 2004 av søppel Lenke til kommentar
Tatern Skrevet 26. april 2004 Del Skrevet 26. april 2004 (endret) tror funksjonen din ikke virker fordi string i c++ egentlig er en array av char. Dvs at et ellement i arrayen ikke kan inneholde mer en en bokstav. Du må derfor sjekke hele stringen om den er lik "what the fuck" og ikke bare enkelt elementer. Du må også sjekke dette før for loopen din, for ellers vil alle bokstavene være tall allerede når den når de nederste if statementene. Tror det skal se så nogen lunde slik ut. string l33tisize(std::string const& s) { string ret = s; if(ret == "what the fuck" || ret == "hva faen") ret = "wtf"; if(ret == "please" || ret == "vær så snill") ret = "plz"; for(std::string::size_type pos = 0; pos < ret.size(); pos++) { if(ret[pos] == 'e' || ret[pos] == 'E') ret[pos] = '3'; if(ret[pos] == 'o' || ret[pos] == 'O') ret[pos] = '0'; if(ret[pos] == 'i' || ret[pos] == 'I') ret[pos] = '1'; if(ret[pos] == 't' || ret[pos] == 'T') ret[pos] = '7'; if(ret[pos] == 's' || ret[pos] == 'S') ret[pos] = '5'; if(ret[pos] == 'a' || ret[pos] == 'A') ret[pos] = '4'; if(ret[pos] == 'g' || ret[pos] == 'G') ret[pos] = '6'; if(ret[pos] == 'c' || ret[pos] == 'C') ret[pos] = '('; } return ret; } Mvh. Tatern PS.: Vær så snill å rett på meg hvis jeg tar feil. Er ganske noob jeg og, så konstruktiv kritikk tas imot med stor takk. Edit: Når man skal sammenligne string variabler i c++ kan man bruke "" string 1 == "ett_eller_annet", så sant man bruker string biblioteket da Endret 26. april 2004 av Tatern Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå