![]() ![]() ![]() | Tekststrenge |
I dette kapitel diskuterer vi fortrinsvis arrays af strenge, herunder det array af strenge som kan overføres fra operativsystemet til main i et C program, når vi starter programmet fra en command prompt (shell). Vi tangerer også input/output af string i printf/scanf.
|
31.1. Arrays af tekststrenge
Indhold Op Forrige Næste Slide Aggregerede slides Stikord Programindeks Opgaveindeks
Et array af tekststrenge kan enten forstås som en to dimensionel char tabel eller som en pointer til en char pointer |
Herunder, i program 31.1, skal vi først lægge mærke til erklæringen af numbers. Vi ser at numbers er et array af strenge. numbers kan også opfattes som en to-dimensionelt char array. numbers initialiseres i samme åndedrag det erklæres, med brug af den notation vi så første gang i program 21.3 i afsnit 21.2.
1 2 3 4 5 6 7 | char *numbers[] = {"one", "two", "three"}; char ch1, ch2, ch3, ch4; ch1 = **numbers; ch2 = numbers[0][0]; ch3 = *(*(numbers+1) + 1); ch4 = numbers[2][2]; | |||
|
Når vi skal følge de fire assignments efter erklæringen af numbers i program 31.1 er det meget nyttigt at se på figur 31.1. Figuren viser numbers, som referer til et array med tre pointere til strengene "one", "two"og "three".
*numbers følger den røde pointer i figur 31.1. **numbers følger den første sorte pointer til tegnet 'o'.
numbers[0] er cellen som udpeges af den røde pointer. Dette er strengen "one". numbers[0][0] er således tegnet 'o'.
numbers+1 peger på det andet element i det vandrette array. *(numbers+1) peger på strengen "two". *(numbers+1) + 1 peger på strengen "wo". *(*(numbers+1) + 1) har således værdien 'w'. Bemærk at denne værdi ikke er en pointer, men derimod et tegn.
numbers[2] peger på strengen "three". numbers[2][2] var værdien tegnet 'r' (et tegn).
Det komplette C program i program 31.2 bekræfter gennem outputtet program 31.3 at vore ræsonnementer ovenfor er korrekte.
Figur 31.1 En illustration af variablen numbers fra ovenstående program |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <stdio.h> int main(void) { char *numbers[] = {"one", "two", "three"}; char ch1, ch2, ch3, ch4; ch1 = **numbers; ch2 = numbers[0][0]; ch3 = *(*(numbers+1) + 1); ch4 = numbers[2][2]; printf("ch1 = %c, ch2 = %c, ch3 = %c, ch4 = %c\n", ch1, ch2, ch3, ch4); return 0; } | |||
|
1 | ch1 = o, ch2 = o, ch3 = w, ch4 = r | |||
|
I boksen herunder viser vi hvordan vi kunne have erklæret numbers som et to-dimensonelt array.
Variablen numbers kunne alternativt erklæres og initialiseres som char numbers[][6] = {"one", "two", "three"} En af dagens opgaver handler om et to dimensionelt array af tekststrenge |
31.2. Input og output af tekststrenge
Indhold Op Forrige Næste Slide Aggregerede slides Stikord Programindeks Opgaveindeks
Pointen i dette afsnit er reglerne for, hvordan "%s" virker i printf og scanf. Vi bemærker, at I scanf springer vi over white space (mellemrum, eksempelvis). Dernæst læser og opsamler scanf tegn indtil der igen mødes white space.
Leg gerne med program 31.4 og bliv dermed fortrolig med scanf på strenge.
Input af teststrenge med scanf har specielle regler Output af tekststrenge med printf virker som forventet |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> #include <string.h> int main(void) { char input[100]; do { printf("Enter a string: "); scanf("%s", input); printf("You entered \"%s\"\n", input); } while (strcmp(input, "exit")); return 0; } | |||
|
31.3. Programparametre
Indhold Op Forrige Næste Slide Aggregerede slides Stikord Programindeks Opgaveindeks
Vi slutter lektionen om tekststrenge af med en kig på, hvordan vi kan overføre parametre til main fra operativsystemets command prompt eller shell.
Operativsystemet overfører et array af strenge til main funktionen med information om, hvordan programmet er kaldt Dette giver muligheder for at overføre programparametre som tekststrenge |
På det røde sted i program 31.5 ser vi parametrene til main. argc vil indeholde antallet af programparametre. argv vil indeholde et array af tekststrenge, ala strukturen i figur 31.1.
I program 31.6 ser vi med fed sort skrift en aktivering af a.out (som er det oversatte program) på tre programparametre. Outputtet fra program 31.5 er vist med rødt i program 31.6.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | /* Echo the command line arguments. */ #include <stdio.h> int main(int argc, char *argv[]) { int i; printf("\n argc = %d\n\n", argc); for (i = 0; i < argc; ++i) printf(" argv[%d] = %s\n", i, argv[i]); putchar('\n'); return 0; } | |||
|
1 2 3 4 5 6 7 8 | [normark@localhost strings]$ a.out programming in C argc = 4 argv[0] = a.out argv[1] = programming argv[2] = in argv[3] = C | |||
|