Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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 av søppel
Lenke til kommentar
' ' 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 av søppel
Lenke til kommentar

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 av Tatern
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...