Permalänk

c++, char exempel

Har börjat läsa om c++ för nån månad sedan, och hat inte förstått vad "char" används till. t.ex char[255]

så kan någon visa ett exempel?

Visa signatur

...

Permalänk
Medlem

en char är en bokstav. char[255] är således 255 bokstäver och rymmer därför en lång mening men inte mycket mer än så :/

Visa signatur

www.filipsprogram.tk - lite freeware
"Delight, herregud. Talang är bara förnamnet."

Permalänk
Medlem

en char används för att lagra en bokstav/tecken/siffra. Om man vill lagra flera bokstäver i följd, t.ex. om man vill lagra ett namn så använder man en _array_ av char:s. Att det är en array betyder enkelt att alla element ligger direkt efter varandra i minnet.

char namn[20];
cin >> namn;

sig att man skriver in "Johan", då kommer arrayen se ut så här:
[J][o][h][a][n][0][.........] , där varje "fack" representerar en char

Den sista byten i en char array som används för att representera en sträng måste sluta på en char med värdet 0, inte siffran 0 (som har asciivärdet 48) utan det måste vara värdet 0.
Alla strängfunktioner (eller de flesta iallafall) använder denna nolla för att veta vart strängen slutar.

Ska man mata in en sträng som har max längden N så måste man skapa utrymme för N+1 chars.

Permalänk

aha tack

Visa signatur

...

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av quaked_ess
men asså, fattar inte va man kan ha den till, man kan ju använda cout istället

Man lagrar data/information/"saker" i variabler. Säg att användaren matar in ett tal som ska bearbetas, då måste man lagra det i en variabel först, samma sak är det med strängar.

Permalänk
Medlem

Du har fått en del svar ser jag men jag ger lite info om vad man kan ha för ren nytta av en array istället för något annat.

när du skriver char namn[255]; så reserveras plats i minnet för att
kunna spara 255 tecken. Dessa platser är nummrerade men
inte mellan 1 och 255 utan mellan 0 och 254.

Du kan använda alla platser mellan 0 och 253, den sista platsen
måste ha en 0:a som avslutar.

Nu kan du t.ex mata in ett namn i denna behållare.

cin.getline(namn,253);

Med den raden kommer du kunna skriva in ett namn
med mellanslag. Den kommer bara ta 253 tecken, och alltså
spara en plats för 0:an. Men sådant måste du ha koll
på själv, att lämna plats för 0:an...

Eller om du skriver 20 tecken och sen enter så kommer enter
att lägga en 0:a på sista platsen. Så den tar det som sker först.

nu har du en lista som ser ut så här t.ex

0 1 2 3 4 5 6 7 8 9 10 11 12
[E] [r] [i] [c] [ ] [E] [r] [i] [c] [s] [s] [o] [n] [\0]
(Eric Ericsson)

Nu kan du komma åt var och en av bokstäverna separat.
Om du vill skriva ut det 3:e tecknet så skriver du:

cout<<namn[3];

Då kommer den skriva ut "i"

Nu kan du dessutom leka lite med detta, du kanske vill vända
på namnet. I ett för och efternamn finns det ett mellanslag
mellan namnen, det kan du använda för att veta vart det ena slutar
och det andra startar.

Så då kan du leta igenom alla platserna tills den når \0
efter mellanslaget, när den hittat det på plats t.ex 4 så vet
du att plats 0-3 är platserna för förnamnet och platserna
5 till slutet (\0) är efternamnet.

Så då kan du första skriva ut platserna för efternamnet och
sedan förnamnet

Kul va?

Sen att du skrev just 255 är lite kul...

I ASCII tabellen har 255 tecken, så om du behöver veta vilket nummer t.ex "ö" har så kan du skriva ett enkelt program.

#include <iostream> #include <conio.h> int main() { using namespace std; int tal; char tkn[255]; for(i=0;i<255;i++) cout<<(char)tkn[i]; getch(); return 0; }

Det där programet kommer skriva ut alla tecken som finns
för varje nummer, så du kan veta hur du skriver en smile gubbe
eller symbolerna i en kortlek, hjärter,ruter,klöver och spader.

Permalänk
Medlem

Garnax, det där kommer väl ändå inte skriva ut asciitabellen? Du skriver ju bara ut vad tkn innehåller vilket bara är skräp eftersom du aldrig sätter den till något.. for loopen ska svarare vara

for(i = 0; i < 255; i++) cout << (char)i;

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem

Mm. Ännu bättre är att skriva

for(i = 0; i < 255; i++) cout << i << " = " << (char)i;

så man ser vilket tecken som är vilket utan att behöva räkna.

Visa signatur

Min hemsida: http://www.srekel.net
Pocket Task Force: http://ptf.srekel.net
Kaka e gott! http://kaka.srekel.net

Permalänk
Medlem

Eftersom det här nu gäller C++ så vill jag bara säga använd INTE char arrayer för att lagra strängar (om du inte har en mycket bra anledning och kan motivera den) utan använd klassen string till det. Det kommer underlätta mycket.

Visa signatur

Confused by earlier errors. Bailing out...
pluggakuten.se - Din läxhjälp på internet

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Garnax
I ASCII tabellen har 255 tecken, så om du behöver veta vilket nummer t.ex "ö" har så kan du skriva ett enkelt program.

#include <iostream> #include <conio.h> int main() { using namespace std; int tal; char tkn[255]; for(i=0;i<255;i++) cout<<(char)tkn[i]; getch(); return 0; }

Det där programet kommer skriva ut alla tecken som finns
för varje nummer, så du kan veta hur du skriver en smile gubbe
eller symbolerna i en kortlek, hjärter,ruter,klöver och spader.

Och varför i hela världen skulle man använda conio.h? Det tillhör varken C eller C++-standarden.

Visa signatur

Mina boktips: Clean codeHead First Design PatternsHead First Object-oriented Analysis and Design
Innovation distinguishes between a leader and a follower. — Steve Jobs

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Kydyl
Eftersom det här nu gäller C++ så vill jag bara säga använd INTE char arrayer för att lagra strängar (om du inte har en mycket bra anledning och kan motivera den) utan använd klassen string till det. Det kommer underlätta mycket.

QFE. char bör bara användas vid ett fåtal tillfällen, t.ex. om man läser in binär text från en fil eller när man ska använda C-API:n. Och även då finns den utmärkta .c_str() som skickar ut en const char *

char kan du börja leka med när du börjar lära dig pekare och dynamisk minnesallokering, om det inte är just för att lära sig de specifika sakerna så är std::string mycket lättare och bör användas så ofta som möjligt. Massa bra metoder, överlagrade operators, dynamisk storlek osv osv.
char är ondska!

Visa signatur

hmm