Kurt Nørmark
Institut for Datalogi, Aalborg Universitet
Sammendrag Forrige lektion Næste lektion Stikord Referencer Indhold | I denne lektion studerer vi forskellige aspekter af tekststrenge. |
Tegn og alfabet |
Alfabet Slide Indhold Stikord Referencer |
Begrebet alfabet: Et alfabet er en ordnet mængde af bogstaver og andre tegn |
|
|
|
Datatypen char i C Slide Indhold Stikord Referencer |
|
|
Program: Udskriften fra programmet herunder. |
|
Program: Et C program som udskriver en ASCII tegntabel. |
|
Tegnkonstanter Slide Indhold Stikord Referencer |
|
|
Program: Tegnkonstanterne i et C program. |
|
Program: Output fra programmet. |
|
|
Oktale og hexadecimal notation (1) Slide Indhold Stikord Referencer |
|
Figur. En illustration af binære, oktale og hexadecimale tal. |
|
Oktale og hexedecimal notation (2) Slide Indhold Stikord Referencer |
|
|
|
Tegn aritmetik Slide Indhold Stikord Referencer |
|
|
Klassificering af tegn Slide Indhold Stikord Referencer |
|
|
Input og output af tegn: getchar og putchar Slide Indhold Stikord Referencer |
|
Program: En funktion der læser et heltal som enkelttegn - basal udgave. |
|
Program: En mere koncentreret version af read_int. |
|
Program: Funktionen read_int og en main funktion som kalder read_int 5 gange. |
|
Program: En mere brugbar udgave med mulighed for fortegn og bedre linieafslutning. |
|
Eksempler: Konvertering mellem talsystemer Slide Indhold Stikord Referencer |
|
Program: Et C program der omregner et tal fra et talsystem til titalsystemet og udskriver resultatet. |
|
Program: Et C program der omregner et tal fra titalsystemet til et andet talsystem og udskriver resultatet. |
|
Eksempel: Kopiering af fil Slide Indhold Stikord Referencer |
|
Program: Et C program der kopierer input til output. |
|
Program: En version uden brug af udtryk med side-effekt. |
|
Program: Oversættelse og udførelse af copy.c med input og output redirection. |
|
Strenge og tekststrenge |
Strenge og tekststrenge Slide Indhold Stikord Referencer |
Begrebet streng: En streng er en sekvens af data af samme type | ||
Begrebet tekststreng: En tekststreng er en streng af datatypen tegn |
|
|
Tekststrenge i C |
Tekststrenge og arrays Slide Indhold Stikord Referencer |
|
Figur. En illustration af en nulafsluttet tekststreng i C |
|
Figur. En tekststreng som er placeret 'i midten' af et array of char |
|
Initialisering og assignment af tekststrenge Slide Indhold Stikord Referencer |
|
Program: Forskellige initialiseringer af tekststrenge. |
|
Program: De fire streng initialiseringer i et helt C program - herunder udskrivninger af de fire tekststrenge. |
|
Program: Output fra programmet. |
|
Program: Tilsvarende forsøg på assignments til de fire tekststrenge. |
|
|
Tekststrenge og pointere Slide Indhold Stikord Referencer |
|
Program: Et program der ved brug af pointere kopierer strengen "Aalborg" ind midt i en anden streng. |
|
Program: Et tilsvarende program, kortere og mere kryptisk - for 'rigtige C programmører'. |
|
Program: Output fra programmet. |
|
Program: Samme program med brug af strcpy. |
|
Program: Output fra programmet. |
|
|
Kopiering af tekststreng - med håndkraft Slide Indhold Stikord Referencer |
|
Figur. En illustration af kopiering af en tekststreng - ved håndkraft med for-løkke. |
Ændringer af tekststrenge Slide Indhold Stikord Referencer |
|
Program: Et program der ændrer det andet tegn i Aalborg fra 'a' til 'A'. |
|
Program: Hele programmet der ændrer det andet tegn i Aalborg fra 'a' til 'A'. |
|
Opgave 10.2. Funktionen strrev | Strengomvending består i at bytte om på tegnene i en tekststreng, således at de første tegn ender med at være de sidste. Eksempelvis er strengomvendingen af "streng" lig med "gnerts". Programmer funktionen strrev(char *str), som omvender tegnene i parameteren str. Bemærk at parameteren str både tjener som input og output parameter. Vi ønsker altså at bytte om på tegnene i det char array, som str peger på. |
Tekststrenge i forhold til tegn Slide Indhold Stikord Referencer |
|
|
Den tomme streng og NULL Slide Indhold Stikord Referencer |
|
|
Lange tekststrenge i C Programmer Slide Indhold Stikord Referencer |
|
Program: Et C program med en lang tekststreng i programmet - et problematisk kildeprogram. |
|
Program: Lange tekststrenge med backslashes - Backslash og EOL tegn ignoeres. |
|
Program: Implicit konkatenering af nabo tekststreng konstanter. |
|
Program: Program output - det samme for alle tre programmer. |
|
|
Program: Implicit konkatenering virker kun på strengkonstanter i kildeprogrammet - Dette program compilerer ikke. |
|
Program: Implicit konkatenering af formateringsstrengen i printf. |
|
Program: Output fra ovenstående program. |
|
Leksikografisk ordning |
Leksikografisk ordning af strenge Slide Indhold Stikord Referencer |
|
|
|
Leksikografisk ordning af strenge Slide Indhold Stikord Referencer |
|
Program: Konkrete eksempler på leksikografisk ordning - ikke C syntaks. |
|
Program: Konkrete eksempler på leksikografisk ordning - med strcmp og i C syntaks. |
|
Program: Konkrete eksempler på leksikografisk ordning - med strcmp. |
|
Lighed af strenge (1) Slide Indhold Stikord Referencer |
|
Figur. En illustration af reference lighed og strukturel lighed mellem char * variable |
Lighed af strenge (2) Slide Indhold Stikord Referencer |
|
|
Funktionen strcmp fra string.h Slide Indhold Stikord Referencer |
|
|
|
Program: Et program der illustrerer den leksikografiske ordning af tekststrenge i C. |
|
Program: Mulig output fra programmet. |
|
Program: Mulig output fra programmet. |
|
Opgave 10.3. Din egen udgave af funktionen strcmp | Funktionen strcmp fra string.h sammenligner to tekststrenge med hinanden, som beskrevet på denne slide. Programmer din egen rekursive udgave af strcmp. En rekursiv strcmp funktion programmeres uden brug af while eller for-løkker. Lad dig evt. inspirere at vores definition på leksikografisk ordning, som på rekursiv vis definerer en 'mindre end' operator på tekststrenge. |
Tidligere eksempler |
Konvertering mellem talsystemer Slide Indhold Stikord Referencer |
|
|
Program: En funktion der konverterer et tal n i base talsystemet (en streng) til et decimalt tal. |
|
Program: Hele programmet. |
|
Udskrivning af enumeration konstanter Slide Indhold Stikord Referencer |
|
|
Program: En funktion som returnerer en symbolsk ugedag (en streng) givet dagens nummer. |
|
Program: Hele programmet. |
|
Program: Hele programmet - programmeret med et array af ugedagnes navne. |
|
Program: Program output - ens i de to programmer. |
|
Biblioteket string.h |
Oversigt Slide Indhold Stikord Referencer |
|
|
Sammensætning af tekststrenge - illustration Slide Indhold Stikord Referencer |
Figur. En illustration af strcat |
|
Sammensætning af tekststrenge Slide Indhold Stikord Referencer |
|
Program: Et program der illustrerer strcat og strlen. |
|
Program: Output fra programmet. |
|
Kopiering af tekststrenge - illustration Slide Indhold Stikord Referencer |
Figur. En illustration af strncpy |
|
Kopiering af tekststrenge - illustration Slide Indhold Stikord Referencer |
Figur. En illustration af strncpy |
|
Kopiering af tekststrenge Slide Indhold Stikord Referencer |
|
Program: Et program der illustrerer strcat og strlen. |
|
Program: Output fra programmet. |
|
En alternativ funktion til strcpy Slide Indhold Stikord Referencer |
|
Program: Et funktioner der allokerer plads til og kopierer en streng. |
|
Program: Hele programmet. |
|
Program: Output fra programmet. |
|
Illustration af strncpy (1) Slide Indhold Stikord Referencer |
Figur. En illustration af strncpy |
|
Illustration af strncpy (2) Slide Indhold Stikord Referencer |
Figur. En illustration af strncpy |
|
Substring ved brug af strncpy Slide Indhold Stikord Referencer |
|
Program: Et program der udtrækker en substreng af en streng. Det er essentielt at target initialiseres med nultegn, idet det viser sig, at strncpy ikke overfører et nultegn. |
|
Program: Output fra programmet. |
|
Lokalisering af et tegn i en streng - illustration Slide Indhold Stikord Referencer |
Figur. En illustration af strchr |
|
Lokalisering af en delstreng i en streng - illustration Slide Indhold Stikord Referencer |
Figur. En illustration af strstr |
|
Lokalisering af en delstreng i en streng Slide Indhold Stikord Referencer |
|
Program: Et program der leder efter en delstreng af en streng. |
|
Program: Output fra programmet. |
|
Andre emner om tekststrenge |
Arrays af tekststrenge Slide Indhold Stikord Referencer |
|
Program: Et program der allokerer og tilgår et array af tre tekststrenge. |
|
Figur. En illustration af variablen numbers fra ovenstående program |
Program: Hele programmet. |
|
Program: Output fra programmet. |
|
|
Program: Programmet med alternativ array erklæring. |
|
Program: Output fra det alternative program (0 tegn ændret til N, ? er ukendt værdi). |
|
Input og output af tekststrenge Slide Indhold Stikord Referencer |
|
Program: Et program der indlæser og udskriver en tekststreng med scanf og printf. |
|
Program: Et program der indlæser en line af tekst med gets - usikkert. |
|
Program: Et program der indlæser en line af tekst med fgets - sikkert. |
|
|
Programparametre Slide Indhold Stikord Referencer |
|
Program: Et program der udskriver de overførte programparametre. |
|
Program: Oversættelse og kørsel af programmet - gcc i MinGW. |
|
Konvertering mellem strenge og tal Slide Indhold Stikord Referencer |
|
|
Program: Eksempel på konvertering af tekststrenge til tal, og fra tal til tesktstrenge - med atoi/atof/atol og sprintf. |
|
|
Program: Program output. |
|
Program: Eksempel på konvertering af tekststrenge til tal, og fra tal til tesktstrenge - med sscanf og sprintf. |
|
Program: Program output. |
|
Opgaver Slide Indhold Stikord Referencer |
Opgave 10.5. Flertals navneord | Skriv et program som oversætter udvalgte engelske navneord fra ental til flertal. Følgende regler skal overholdes:
Udskriv hvert navneord i både ental og flertal. Som altid skal du designe en funktion med et passende navn, og med parametre (input og evt. output). Og som altid laver vi top-down programmering ved trinvis forfinelse. Ønsker du at bruge returværdien af funktionen til noget? Afprøv dit program på følgende engelske navneord:
Alloker plads til disse i en passende array af tekststrenge. Denne opgave svarer til opgave 5 side 532 i 6. udgave af lærebogen Hints: Måske er funktionen strrchr fra string.h nyttig i denne opgave. Den søger efter et tegn fra bagenden af strengen. Husk også at du blot kan tilgå tegn i en tekststreng med array subscripting operatoren: str[i]. Du kan teste om et tegn i din streng svarer til et bestemt tegn: str[i] == 'y'. |
Opgave 10.5. Længste fælles endelse af to ord | Skriv et program med en funktion der finder og returnerer det længste fælles endelse (suffix) af to ord. Funktionen skal have tre parametre. De to ord (to tekststrenge) skal overføres som input parametre. Den længste fælles endelse skal returneres i en output parameter (også en tekststreng). (Hvordan markerer du forskellen på en input parameter og en output parameter, som begge er tekststrenge?) Overvej hvordan der bliver allokeret plads til tesktstrengen med den fælles endelse (vil du bruge statisk eller dynamisk allokering?). Eksempelvis er "logi" den længste fælles endelse af ordene "datalogi" og "biologi". Og den længste fælles endelse af "program" og "diagram" er "gram". Denne opgave svarer til opgave 8 side 533 i 6. udgave af lærebogen |
Kapitel 10: Tegn og Tekststrenge
Kursets hjemmeside Forfatteren's hjemmeside Om frembringelsen af disse sider Forrige lektion (top) Næste lektion (top) Forrige lektion (bund) Næste lektion (bund)
Genereret: 9. maj 2022, 14:00:00