09 - Variabler för text

Variabler för text


Om man vill spara text i en variabel så går det inte med int, int är som vi tidigare pratat om till för att spara heltal.

Char är däremot är en datatyp som klarar att lagra texen. Jag ska nu visa källkoden till ett program som frågar efter användarens namn och sedan skriver ut det igen med hjälp av en hel radda char-variabler (en variabel per tecken). Förklaringen av allt kommer som vanligt efter koden.

  1.  
  2. #include<iostream>
  3.  
  4. using std::cout;
  5. using std::cin;
  6.  
  7. int main ()
  8. {
  9. char namn[31];
  10.  
  11. cout << "Vad heter du?";
  12. cin >> namn;
  13. cout << "Trevligt att ses " << namn << "!";
  14.  
  15. return 0;
  16. }


På nionde raden skapar vi variabeln namn av datatypen char. Egentligen skapar vi faktiskt 31 stycken char-variabler, detta är eftersom man måste ha en variabel per tecken när man arbetar med datatypen char. Att skapa flera variabler med samma namn som vi gör här kallas att skapa en array eller vektor.

Man kan även skapa arrayer med heltal om man till exempel skulle behöva spara skonummren för alla personer i en hel skolklass, mer om detta i senare delar.

Hur som helst, om man skriver 31 mellan klamrarna så får man lagra 31 tecken. Det är ju ganska logiskt, det som kan vara mindre logiskt till en början är att det första tecknet lagras på platsen 0 (man börjar räkna på 0 och inte 1) och således blir det sista tecknet tecken nummer 30. För att göra saken ännu värre så är det sista tecknet reserverat för ett specialtecken som berättar att "här är det slut på arrayen" (tecknet \0). I praktiken kan man därför bara lagra 30 stycken tecken i en array av storleken 31.

Jämförelser


När man vill jämföra olika strängar som är sparade med hjälp utav char-arrayer får man ta till lite olika knep. Anledningen till detta är om man skriver såhär till exempel:

if (min_char_array = "blinkenlights")


Så kommer det inte alls bli som man vill. Man kan nämligen inte jämföra en char-array med en textsträng. Resultatet av detta kommer faktiskt bli att det första elementet (det första tecknet) ur char-arrayen plockas ut (eftersom man inte angivit vilket tecken man vill jämföra) och sedan jämförs detta tecken med hela strängen på andra sidan. Det är inte det man vill uppnå, och det går inte heller att jämföra ett tecken med en hel sträng då klagar troligtvis kompilatorn.

Det man istället kan göra är att använda sig utav en liten funktion som härstammar från C som heter strcmp. Såhär kan man använda den:

  1.  
  2. #include<iostream>
  3.  
  4. using std::cout;
  5. using std::cin;
  6.  
  7. int main ()
  8. {
  9. char janej[4];
  10.  
  11. cout << "Tycker du att C++ är roligt? (svara med ja eller nej)";
  12. cin >> janej;
  13.  
  14. if (strcmp(janej,"ja") == 0)
  15. {
  16. cout << "Vad bra!\n";
  17. }
  18. else
  19. {
  20. cout << "Det var tråkigt att höra :(\n";
  21. }
  22.  
  23. return 0;
  24. }


Här skickar vi in en variabeln janej och strängen "ja" till funktionen strcmp. Om dessa två saker vi skickat till funktionen är lika så kommer den att skicka tillbaka värdet 0. Alltså jämför vi om värdet som kommer tillbaka är 0, i så fall vet vi att texterna var lika.

En sak att lägga märke till här är att vi egentligen inte kontrollerar om svaret är "nej" ifall det inte var "ja". Alltså kommer den skriva ut "Det var tråkigt" även om man matar in en text som till exempel "miffo" istället för ja eller nej. Funktionen kan också vara känslig och göra skillnad på stora och små bokstäver.

Det kommer mer om hur man anropar funktioner och skapar egna funktioner i senare delar i guiden.

Källa: http://blinkenlights.se/