Vad har vi lärt oss så här långt Vad är en sträng? Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar.

Relevanta dokument
Föreläsning 11. Strängar

Grundkurs Programmering

Grundkurs Programmering

Planering Programmering grundkurs HI1024 HT data

Planering Programmering grundkurs HI1024 HT TIDAA

Föreläsning 7 Strängar

Tecken & Strängar. Kapitel 7

Planering Programmering grundkurs HI1024 HT 2014

#include <stdio.h> #include <string.h>

Övning från förra gången: readword

Klassdeklaration. Metoddeklaration. Parameteröverföring

Repetition C-programmering

Uppgifter till praktiska tentan, del A. (7 / 27)

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Föreläsning 13. In- och utmatning

Loopar och datatyper. Föreläsning 3

Introduktion C-programmering

En kort text om programmering i C.

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Hantering av textsträngar och talsträngar. William Sandqvist

Programmering i C. Vad är C? Målsättning. Litteratur. Jämförelse med Java. Exempel : Ett program som skriver ut texten Hello, world

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

Loopar och datatyper. Föreläsning 3

4 Sammansatta datatyper

Tentamen *:58/ID100V Programmering i C Exempel 3

Strängar. Strängar (forts.)

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Deklarera en struct som kan användas för att representera en rät linje

1 Texthantering. 1.1 Typen char. Exempel, skriv ut alfabetet

Switch, Array (fält) switch break, continue, goto (scary) Sammansatta tilldelningar Kommentarer Array Sortering

Föreläsning 9. struct

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Programmeringsteknik med C och Matlab

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN1 - Teoretisk tentamen Tid: Torsdagen den 20 oktober 2011,

TDIU01 - Programmering i C++, grundkurs

Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten 2010

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Programmering i C, 7,5 hp

Programmeringsteknik för Ingenjörer VT06. Föreläsning 10

Indexerade variabler

Föreläsning 12. struct

C konstruerades i början på sjuttiotalet av Dennis Ritchie vid Bell Laboratories.

Tentamen i Programmering grundkurs och Programmering C

Pekare och arrayer. Indexering och avreferering

*Pekarvärden *Pekarvariabler & *

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Arrays (indicerade variabler) Föreläsning 4

Arrays (indicerade variabler) Föreläsning 6

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

2 Pekare och dynamiska variabler.

Programmeringsteknik med C och Matlab

HI1024 Programmering, grundkurs TEN

Funktioner och programstruktur. Föreläsning 5

C-programmering, föreläsning 2 Jesper Wilhelmsson

F4. programmeringsteknik och Matlab

C++ Lektion Tecken och teckenfält

Föreläsning 3: Booleans, if, switch

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Att använda pekare i. C-kod

Funktioner och programstruktur. Föreläsning 5

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Tentamen i Programmering grundkurs och Programmering C

Användarhandledning Version 1.2

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

C++ - En introduktion

TDIU01 - Programmering i C++, grundkurs

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Programmering, grundkurs, 8.0 hp HI1024, omtentamen, TEN1. Tisdagen den 7 juni 2011,

C-programmering, föreläsning 1 Jesper Wilhelmsson

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Objektorienterad Programmering (TDDC77)

Tentamen i Programmering grundkurs och Programmering C

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Uttryck och villkor. Föreläsning 2

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Tentamen i Programmering grundkurs och Programmering C

HI1024 Programmering, grundkurs TEN

Parameteröverföring. Exempel. Exempel. Metodkropp

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Poster ( structar ) Postdeklarationer

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Typkonvertering. Java versus C

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Tentamen ges för: Tentamensdatum: Tid:

Innehåll. Introduktion till objektorientering. OOP (objektorienterad programmering) Objekt, instanser, klasser

Introduktionskurs i Datateknik

Föreläsning 4. Val, boolska värden, läsbarhet, osv

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Transkript:

Vad har vi lärt oss så här långt Vad är en sträng Strängkonstanter. Att skriva ut och läsa in strängar. Att arbeta med strängar. Matriser av strängar. Sortering av strängar. Vad har vi lärt oss i dag

Literals Identifiers [A-Za-z_][A-Za-z0-9_]* Syntax Tokens (Keywords) Semantik Operators Punctuation marks,;(){:;white space

DATA TYPES Literals Identifiers [A-Za-z_][A-Za-z0-9_]* Syntax Tokens CTRL STRUCT Operators Punctuation marks,;(){:;white space PRG CORR (Keywords) Semantik PRG IN LARGE

= + - * / % ++ -- ==!= > < >= <= 10 9 8 4 3 1 Compound Literals Basic 7 pointer Aggregates struct {62, Anders string Hej! Side effects Bitwise typedef 2 casting Precedence Operands Assosiativity Reference Abstract array {1,2,3 { a, b, c char c int 7 float 2.0 Eval Order.! && file Comparison Aritmetic Use of not init var ~& ^ <<>> Logical Und. behavior Neg arg in % + - * / % & ^ << >> A[i] * & A->b a.b Referens Compound assign. DATA TYPES Literals Identifiers [A-Za-z_][A-Za-z0-9_]* PRG CORR Imp. dependent Dangling else, AB:C Sizeof() Other Implicit promotion Explicit (type) Syntax related qualifiers Syntax Tokens (Keywords) Semantik Sequencing CTRL STRUCT Operators Punctuation marks Int / int,;(){:;white space PRG IN LARGE Logical related Statement; Compound statement { 2 Selection If else Functions, scope switch for while do Repetition Jump Directives int main(void){ declarations statements 1 6 3 /*comment*/ or // 5 break continue goto return exit

Alla program som har någon form av dialog med sin användare behöver kunna skriva ut, och läsa in, text och inte enbart enstaka bokstäver. Givetvis går det att skriva ut en text bokstav för bokstav men i stort sätt alla programmeringsspråk har något mekanism för att hantera en följd av bokstäver, ofta kallat för en sträng (string). printf( %c, H ); printf( %c, e ); printf( %c, j ); printf( %c, );

I c skapas en strängkonstant (string literal) genom att sätta en text inom citat-tecken. Exempel på strängkonstant P.g.a sitt anglosaxsiska ursprung så kan utskriften se konstig ut. För specialtecken används skrivsättet \x, där \ talar om för kompilatorn att det tecken som ska stå på den platsen i strängen bestäms av x. Ska tecknet \ skrivas ut får ni skriva \\.!"#$%&'()*+,-./ 0123456789:;<=> @ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_ `abcdefghijklmno pqrstuvwxyz{ ~

printf( Welcome to the Weekday calcylator! ); printf( The answer is %d!, answer); Men om man vill skriva ut ett %-tecken, hur gör man det! Det finns ett stort antal praktiska funktioner i olika bibliotek som gör det lätt att arbeta med strängar, men det är viktigt att argumenten då verkligen är strängar, i annat fall kan det bli riktigt fel

NEJ! Strängar är ingen egen typ i c utan strängar lagras på ett speciellt sätt i vanliga endimensionella matriser. Strängkonstanter är bara ett praktiskt sätt att skriva initieringsaggregatet för en sådan matris! Strängar lagras som en array av char som avslutas med null-tecknet \0 Exempel hej lagras som [ h e j \0 ] och kräver alltså en array med längden minst 4 för att få plats! Den får lagras i en array som är längre, och då får det vara vad som helst efter null-tecknet. Ex: [ h e j \0 k a ] Om null-tecknet saknas är det ingen sträng utan en array av char och inga inbyggda funktioner för strängar kommer att fungera korrekt! Kom ihåg att char egentligen är heltal som tolkas som tecken vid t.ex. %c. \0 har heltalsvärdet 0 vilket ibland används int main(void){ char msg[]={'h','e','j','','\0'; printf("hej"); printf(msg);

Även om strängar saknar en egen typ finns det inbyggt stöd för strängar. T.ex. behöver vi inte (men kan) initialisera en sträng såsom: char s[8]={'h','e','j','\0'; utan kan skriva: char s[8]="hej"; //h e j \0 \0 \0 \0 \0 Observera behovet av plats för \0 char s[3]="hej"; printf("%s",s); kommer inte att lagra \0 och printf kommer fortsätta att skriva slumpmässiga tecken till den stöter på en byte som är 0. Vi kan istället låta kompilatorn beräkna längden: char s[] = hej ;

Vi kan enkelt skriva ut strängar med printf: char s[]="hej"; printf("%s",s); Eller ännu enklare med puts: char s[]="hej"; puts(s); //skriver ut strängen s och gör sedan ny rad Med printf kan vi inkludera strängar i strängar: char namn[]="nicklas"; printf("hej %s", namn);

Att läsa in strängar kan vid första anblicken verka lika enkelt som att skriva ut men innehåller en hel del komplikationer: Vid vilket tecken ska vi sluta läsa Mellanslag, ny rad, tab Vad gör vi med tecken som är kvar när vi läst färdigt Lämnar kvar eller slänger bort Vad gör vi om input vi läser inte får plats i arrayen vi läser till Enklast att använda är scanf och gets. De är båda livsfarliga eftersom de inte har någon aning om hur lång array de skriver till och kommer fortsätta skriva rätt ut i minnet om input är för långt. Vi kommer ändå använda dessa initialt men kom ihåg problematiken!

int main() { char s[10]; scanf("%s",s); printf("%s",s); return 0; Observera att vi inte ska använda & i scanf då s är en array och detta redan är en pekare! Jämför med: scanf( %d,&tal); scanf skippar först alla white spaces läser sedan tecken tills den stöter på white spaces. white spaces är ett samlingsnamn för bl.a. mellanslag, tab och ny rad. Detta gör att scanf inte kan användas för att läsa en hel mening. Skriver vi hej pa dig läses endast hej Alla tecken som är kvar lämnas kvar på inputströmmen och kommer att läsas av nästa försök att läsa. Detta kan ställa till problem! char s1[100]; char ch; printf("skriv in strang:"); scanf("%s",s1); printf("skriv in char:"); scanf("%c",&ch);//när vi kör läses här return och vi får ingen chans att skriva!

char s1[100]; char ch; printf("skriv in strang:"); gets(s1); printf("skriv in char:"); scanf("%c",&ch); gets läser allt tills den kommer till inklusive white spaces. Den tar bort från inputströmmen men lägger inte in den i arrayen utan byter den mot \0.

För att inte riskera att läsa in mer än som får plats kan man använda fgets istället som vi kommer att titta närmare på senare. Vill man ha full kontroll över hur inläsningen av strängar sker skriver man ofta en egen inläsningsfunktion. Boken har ett exempel på sid 287: int readline(char s[], int n) { int ch, i=0; while ((ch=getchar())!='') if(i<n) s[i++]=ch; s[i]='\0'; return i; //Denna läser maximalt n tecken så s måste ha n+1 platser!

Eftersom en sträng är en array tecken med \0 sist kan vi enkelt nå godtyckligt tecken: char s[]="hej pa dig"; char tecken5 = s[4];//tecken5 blir p Här är en funktion (sid 287) som räknar mellanslag i en sträng: int countspaces(char s[]) { int count=0,i; for(i=0; s[i]!='\0 ; i++) if(s[i]==' ') count++; return count; Observera att vi till strängar inte behöver skicka längden men också hur viktigt det är att de avslutas med \0!

Det mesta av C s stöd för stränghantering finns i standardbiblioteket string.h. Behöver du göra något med strängar så leta här. Vilka som ska ingå i C-standarden kan du läsa i 23.6 men dessutom har många miljöer extra funktioner. När du ska använda en biblioteksfunktion som du inte använt förut i ett program börjar du med att läsa dokumentationen. Sedan skriver du ett litet testprogram för att se om det fungerar som du förstått. Först därefter provar du att använda funktionen i ditt program Glöm inte att högst upp inkludera headern: #include <string.h>

För att ta reda på längden hos en sträng loopar man enkelt igenom strängen räknande antal varv tills man hittar \0 liknande funktionen som räknade mellanslag. Dock finns en sådan färdig i string.h: char s[]="hej pa dig"; int antal=strlen(s); Den returnerar strängens längd inte arrayens. Arrayen kan vara mycket längre. \0 räknas inte heller till strängen utan bara tecknen i strängen. Om man läser dokumentationen för strlen i boken eller i unix med kommandot: man strlen eller på nätet ser man funktionsprototypen: size_t strlen(const char *s) Här stöter vi då på en del saker vi inte helt behärskar. Det gäller då att försöka förstå tillräckligt och sedan pröva till dess att ni är fullärda. Den returnerar size_t som är en definierad typ men vi kan hantera den som en int. const betyder att arrayen inte får ändras av funktionen. Den vill ha en pekare men en array skickas som pekare till funktioner.

Vi kan initiera en sträng enligt: char s[]="hej pa dig"; Men inte tilldela enligt: char s[20]; s="hej pa dig";//kompileringsfel! Inte heller går det att kopiera strängar med = char s1[20]="hej pa dig"; char s2[20]; s2=s1;//kompileringsfel -vilket ju inte går med arrayer generellt! Man måste helt enkelt loopa igenom arrayerna och kopiera tecken för tecken eller även här finns en färdig funktion i string.h: int main() { char s1[20]="hej pa dig"; char s2[20]; strcpy(s2,s1); //kopierar strängen i s1 till s2 OBS vårt ansvar att s2 är tillräckligt stor printf("%s",s2); return 0; Vi kan också kopiera in litteraler: strcpy(s1, Hej );

För att sätta ihop strängar använder vi strcat: char s1[20],s2[20]; strcpy(s1,"samman"); strcpy(s2,"slagning"); strcat(s1,s2);//s1 innehåller nu sammanslagning printf("%s",s1); Som vanlig är det vårt ansvar att vi får plats

Inte heller == fungerar mellan strängar istället har vi: strcmp(s1,s2) som returnerar ett heltal som är mindre än noll lika med noll eller större än noll beroende om s1 kommer före lika eller efter alfabetiskt (enligt ascii) strcmp(s1,s2)<0 returnerar 1 om s1 är före s2 strcmp(s1,s2)==0 returnerar 1 om s1 är lika med s2 vilket kan användas i en if-sats för sortering eller jämförelser

Ordbok: 4 rader á 8 tecken. A I K #include <stdio.h> #define MAX 4 #define WORDLENGTH 7 int main() { char ordbok[max][wordlength+1]; for (int i=0; i<max; i++ { printf("skriv in ett ord:"); gets(ordbok[i]); for (int i=0; i<max; i++) printf("%s",ordbok[i]); return 0;

#include <stdio.h> #define MAX 4 #define WORDLENGTH 7 int main() { char ordbok[max][wordlength+1]; Ordbok: 4 rader á 8 tecken. for (int i=0; i<max; i++ { printf("skriv in ett ord:"); gets(ordbok[i]); for (int i=0; i<max; i++) printf("%s",ordbok[i]); return 0; A I K ordbok ordbok[0] ordbok[0][0] ordbok[1] ordbok[2] ordbok[3] i 0 17 18 [0][0] 19 [0][1] 20 [0][2] 21 [0][3] 22 [0][4] 23 [0][5] 24 [0][6] 25 [0][7] 26 [1][0] 27 [1][1] 28 [1][2] 29 [1][3] 30 [1][4] 31 [1][5] 32 [1][6] 33 [1][7] 34 [2][0] 35 [2][1] 36 [2][2] 37 [2][3] 38 [2][4] 39 [2][5] 40 [2][6] 41 [2][7] 42 [3][0] 43 [3][1] 44 [3][2] 45 [3][3] 46 [3][4] 47 [3][5] 48 [3][6] 49 [3][7] 50 51 52 53 54 55

#include <stdio.h> #define MAX 4 #define WORDLENGTH 7 int main() { char ordbok[max][wordlength+1]; Ordbok: 4 rader á 8 tecken. for (int i=0; i<max; i++ { printf("skriv in ett ord:"); gets(ordbok[i]); for (int i=0; i<max; i++) printf("%s",ordbok[i]); return 0; A I K ordbok ordbok[0] ordbok[0][0] ordbok[1] ordbok[2] ordbok[3] i 0 AIK 17 18 [0][0] 19 [0][1] 20 [0][2] 21 [0][3] 22 [0][4] 23 [0][5] 24 [0][6] 25 [0][7] 26 [1][0] 27 [1][1] 28 [1][2] 29 [1][3] 30 [1][4] 31 [1][5] 32 [1][6] 33 [1][7] 34 [2][0] 35 [2][1] 36 [2][2] 37 [2][3] 38 [2][4] 39 [2][5] 40 [2][6] 41 [2][7] 42 [3][0] 43 [3][1] 44 [3][2] 45 [3][3] 46 [3][4] 47 [3][5] 48 [3][6] 49 [3][7] 50 51 52 53 54 55 A I K 0

#include <stdio.h> #define MAX 4 #define WORDLENGTH 7 int main() { char ordbok[max][wordlength+1]; Ordbok: 4 rader á 8 tecken. for (int i=0; i<max; i++ { printf("skriv in ett ord:"); gets(ordbok[i]); for (int i=0; i<max; i++) printf("%s",ordbok[i]); return 0; A I K ordbok ordbok[0] ordbok[0][0] ordbok[1] ordbok[2] ordbok[3] i 0 AIK 17 18 [0][0] 19 [0][1] 20 [0][2] 21 [0][3] 22 [0][4] 23 [0][5] 24 [0][6] 25 [0][7] 26 [1][0] 27 [1][1] 28 [1][2] 29 [1][3] 30 [1][4] 31 [1][5] 32 [1][6] 33 [1][7] 34 [2][0] 35 [2][1] 36 [2][2] 37 [2][3] 38 [2][4] 39 [2][5] 40 [2][6] 41 [2][7] 42 [3][0] 43 [3][1] 44 [3][2] 45 [3][3] 46 [3][4] 47 [3][5] 48 [3][6] 49 [3][7] 50 51 52 53 54 55 A I K 0 DIF A I K D I F 1

#include <stdio.h> #define MAX 4 #define WORDLENGTH 7 void sortera(char lista[][wordlength+1], int langd) { int main() { char ordbok[max][wordlength+1]; for (int i=0; i<max; i++ { printf("skriv in ett ord:"); gets(ordbok[i]); sortera(ordbok, MAX); for (int i=0; i<max; i++) printf("%s",ordbok[i]); return 0; ordbok ordbok[0] ordbok[0][0] ordbok[1] ordbok[2] ordbok[3] i 0 18 4 17 18 [0][0] 19 [0][1] 20 [0][2] 21 [0][3] 22 [0][4] 23 [0][5] 24 [0][6] 25 [0][7] 26 [1][0] 27 [1][1] 28 [1][2] 29 [1][3] 30 [1][4] 31 [1][5] 32 [1][6] 33 [1][7] 34 [2][0] 35 [2][1] 36 [2][2] 37 [2][3] 38 [2][4] 39 [2][5] 40 [2][6] 41 [2][7] 42 [3][0] 43 [3][1] 44 [3][2] 45 [3][3] 46 [3][4] 47 [3][5] 48 [3][6] 49 [3][7] 50 51 52 53 54 55 lista langd

Iden här är att skriva en funktion som sorterar en array av strängar och anropa den innan orden skrivs ut i exemplet innan. Gå tillbaka till föreläsning 4 och repetera sortering och försök sedan att tillämpa det på strängar med hjälp av vad vi lärt oss idag. Försök först själv men om du kör fast kan du titta vidare på dagens föreläsning efter läsanvisningen för att få hjälp på vägen. Det är dock viktigt att du först försöker själv för att du verkligen ska förstå detta mycket viktiga exempel.

Sortering av strängar 2 void sortera(char lista[][wordlength+1], int langd) { int i, j; for (i=0; i<langd-1; i++) { for (j=0; j<langd-1-i; j++) { if(strcmp(lista[j], lista[j+1])>0) { byt(lista[j], lista[j+1]); A I K D I F B L H V 7 1 0 18 4 0 0 17 18 [0][0] 19 [0][1] 20 [0][2] 21 [0][3] 22 [0][4] 23 [0][5] 24 [0][6] 25 [0][7] 26 [1][0] 27 [1][1] 28 [1][2] 29 [1][3] 30 [1][4] 31 [1][5] 32 [1][6] 33 [1][7] 34 [2][0] 35 [2][1] 36 [2][2] 37 [2][3] 38 [2][4] 39 [2][5] 40 [2][6] 41 [2][7] 42 [3][0] 43 [3][1] 44 [3][2] 45 [3][3] 46 [3][4] 47 [3][5] 48 [3][6] 49 [3][7] 50 51 52 53 54 55 lista Langd i j lista[0] lista[1] lista[2] lista[3]

Sortering av strängar 3 void byt(char s1[], char s2[]) { char tmp[wordlength+1]; strcpy(tmp,s1); strcpy(s1,s2); strcpy(s2,tmp); s1 s2 A I K D I F B L H V 7 1 0 18 4 0 0 17 18 [0][0] 19 [0][1] 20 [0][2] 21 [0][3] 22 [0][4] 23 [0][5] 24 [0][6] 25 [0][7] 26 [1][0] 27 [1][1] 28 [1][2] 29 [1][3] 30 [1][4] 31 [1][5] 32 [1][6] 33 [1][7] 34 [2][0] 35 [2][1] 36 [2][2] 37 [2][3] 38 [2][4] 39 [2][5] 40 [2][6] 41 [2][7] 42 [3][0] 43 [3][1] 44 [3][2] 45 [3][3] 46 [3][4] 47 [3][5] 48 [3][6] 49 [3][7] 50 51 52 53 54 55 lista Langd i J s1 s2 tmp[0]. lista[0] lista[1] lista[2] lista[3] A I K B L D I F H V 7 1 0 18 4 0 0

Strängkonstanter hej [ h, e, j, ]. Att skriva ut och läsa in strängar printf( %s, hej ). Att arbeta med strängar string.h - strlen, strcpy, strcat. Matriser av strängar plats för! 2D array som parameter deklaration av andra dimensionen. Se upp med: Storlek, tilldelning, jämföra, dimension

Gå igenom föreläsningen och programmera exemplen, glöm inte <string.h> och experimentera med koden. Försök fixa sorteringsfunktionen till vår array (hjälp finns efter denna sida men försök utan) Läs igenom 13.1-13.5 Hade du svårt med sorteringsfunktionen och/eller använde mycket hjälp gör K13 P1 Skriv en egen funktion som returnerar längden av en sträng. Om du läst kapitel 12 och står ut med det myckna användandet av pekare är det kul och nyttigt att läsa igenom 13.6 och programmera exemplen. E-excercises, P-programming projects