C++ fråga (inte speciellt avancerad)

Permalänk
Medlem

C++ fråga (inte speciellt avancerad)

Hej! om man vill spara ner strängar i variabler så kan man ju skriva std::string variabeln;
men då går inte variabeln att använda i switch eller if satser.
Jag vet även att det ska gå att spara ner strängar genom att göra en "char array". Men hur gör man en sådan?

Visa signatur

//Toombass

Permalänk
Medlem

std::char array[]="hejsan";

om jag inte minns fel.

Permalänk
Medlem

char array[] = "Hejsan";

[Edit] Strängar i en switch sats? .. går inte .. går endast använda heltal i en switch. std::string fungerar perfekt i en if-sats, gör även c-strängar men då måste man använda t.ex. strcmp() ..

Permalänk
Medlem

På vilket sätt kan du inte använda en std::string i en if-sats??

Permalänk
Citat:

Ursprungligen inskrivet av ollel
På vilket sätt kan du inte använda en std::string i en if-sats??

Om jag inte minns helt fel så när du använder t ex

string hej = "Tjosan";

Så blir hej enbart en pekare till arrayen?

Visa signatur
Permalänk
Medlem

hmm får det inte riktigt att fungera...

såhär vill jag använda den :

char kommando[];

std::cin >> kommando;

if (kommando == 'exit')
std::cout << "Du har valt att avsluta programmet" << endl;

men får det inte att fungera :S

är mycket tacksam för all hjälp!

Visa signatur

//Toombass

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Tynnhammar
Om jag inte minns helt fel så när du använder t ex

string hej = "Tjosan";

Så blir hej enbart en pekare till arrayen?

eh .. om det är std::string du snackar om så har du helt fel .. std::string överlagrar == operatorn. "hej" är ett string objekt.

Citat:

"hmm får det inte riktigt att fungera...

såhär vill jag använda den :

char kommando[];

std::cin >> kommando;

if (kommando == 'exit')
std::cout << "Du har valt att avsluta programmet" << endl;"

ska vara så här:

char kommando[20]; std::cin >> kommando; if(!strcmp(kommando, "exit")) std::cout << "Du har valt att avsluta programmet" << endl;

char kommando[] är samma sak som en "char *", och i detta fall pekar den på ingetting. För att kunna spara data i en array måste du i detta fall "allokera" uttrymme på stacken.

"exit" i koden byts ut mot en pekare till strängen som finns i datasektionen i .exe filen. Alla hårdkodade strängar i en .exe (eller .dll m.m) ligger i datasektionen.

[EDIT 2] Denna kod är egentligen osäker och bör inte användas då man lätt overflowar kommando. Använd std::string istället eller använd en inputfunktion där man kan bestämma max längden av datan som sparas i arrayen.

Permalänk
Hedersmedlem
Citat:

Ursprungligen inskrivet av Toombass
hmm får det inte riktigt att fungera...

såhär vill jag använda den :

char kommando[];

std::cin >> kommando;

if (kommando == 'exit')
std::cout << "Du har valt att avsluta programmet" << endl;

men får det inte att fungera :S

är mycket tacksam för all hjälp!

Det fungerar inte. Isf får du göra såhär:

char kommando[50]; std::cin >> kommando; if (!strcmp(kommando, "exit")) std::cout << "Du har valt att avsluta programmet." << std::endl;

EDIT: GAH! MagnusL hann före. =/

Visa signatur

Vim
Kinesis Classic Contoured (svart), Svorak (A5)
Medlem i signaturgruppen Vimzealoter.

Permalänk
Medlem

klagar inte kompilatorn på --> char kommand[];

med char[]

char kommando[32]; std::cin >> kommando; if (strcmp(kommando, "exit") == 0) std::cout << "Du har valt....." << std::endl;

med std::string

std::string kommando; std::cin >> kommando; if (kommando == "exit") std::cout << "Du har valt....." << std::endl;

Permalänk

En liten fråga bara, är inte string och std::string samma?

Visa signatur
Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Tynnhammar
En liten fråga bara, är inte string och std::string samma?

måste inte vara det .. beror på i vilken namnrymd .. skulle ju kunna vara skit::string .. =P .. i 99% av fallen är string == std::string ..

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av MagnusL
char array[] = "Hejsan";

[Edit] Strängar i en switch sats? .. går inte .. går endast använda heltal i en switch. std::string fungerar perfekt i en if-sats, gör även c-strängar men då måste man använda t.ex. strcmp() ..

Nu är jag absolut inget proffs men det behöver väl inte enbart vara heltal i en switch...

Har för mig att en switch kan ta tecken också... case 'a' osv...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Garnax
Nu är jag absolut inget proffs men det behöver väl inte enbart vara heltal i en switch...

Har för mig att en switch kan ta tecken också... case 'a' osv...

en char castas om till ett heltal .. t.ex. skriver du 'A' så är det samma sak som 65 ...