Strängar. Strängar (forts.)

Relevanta dokument
Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i. Programmering i språket C

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

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen i Programmering grundkurs och Programmering C

Tentamen *:58/ID100V Programmering i C Exempel 3

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

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

Tentamen i Programmering grundkurs och Programmering C

Föreläsning 13. In- och utmatning

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

Innehållsförteckning. Exempel. Åtkomst & användarhandledning

C-programmering. Målsättning Introducera programmering i C för de som inte har någon erfarenhet av C eller C++. Litteratur

Pekare och arrayer. Indexering och avreferering

Programmeringsteknik med C och Matlab

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

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

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

Poster ( structar ) Postdeklarationer

Filer och structer Del 2

Tecken & Strängar. Kapitel 7

*Pekarvärden *Pekarvariabler & *

Föreläsning 11. Strängar

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.

2 Pekare och dynamiska variabler.

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

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

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

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

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

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

En kort text om programmering i C.

C++ Lektion Tecken och teckenfält

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

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

Enklast att skriva variabelnamn utan ; innehåll och variabelnamn skrivs ut

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

Introduktionslaboration

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

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

Lösningar till uppgifterna sätts ut på kurssidan på nätet idag kl Omtentamen i Programmering C, 5p, A1, D1, E1, Fri, Pr1, Te/Ek1,

Planering Programmering grundkurs HI1024 HT 2014

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

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

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

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

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

Att använda pekare i. C-kod

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Planering Programmering grundkurs HI1024 HT data

Läsning, skrivning, tangentbord, skärm. F6: Filhantering (kap. 8) Tabell på skärmen. save

.c och.h filer. Programmeringsteknik 113

5 Grundläggande in- och utmatning

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

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

Pekare. Pekare. Varför använder vi pekare? Vad är en pekare? Pekare. Deklaration/initiering av pekare

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

Enkla datatyper minne

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

[] Arrayer = Indexerad variabel

Möte 10: Kommunikation mellan processer - (PI)

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

1 Funktioner och procedurell abstraktion

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Introduktionslaboration

Programmering i C++ EDA623 Strömmar och filer. EDA623 (Föreläsning 9) HT / 19

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Programmeringsteknik med C och Matlab

Föreläsning 7 Strängar

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Laboration 3 HI1024, Programmering, grundkurs, 8.0 hp

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Exempel. Rekursion. Iterativ motsvarighet. fakultet.c. fibonacci.c Fibonaccisekvensen definieras som följer ƒ 0 =0, ƒ 1 =1, ƒ i+1 =ƒ i +ƒ i-1, i=1,2,

Kapitel 5. Strömmar. Utmatning

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

PC-teknik, 5 p LABORATION FILHANTERING

Standardfunktioner i C

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

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

6.1 Kompilering och lite grundläggande information

TDIU01 - Programmering i C++, grundkurs

"Referentiell transparens"

Planering Programmering grundkurs HI1024 HT TIDAA

Variabler använder man sig av för att under programkörningen spara data eller information i primärminnet. En variabel har typ, namn och värde.

Datalogi för E Övning 3

LÖSNINGSFÖRSLAG TILL Tentamen i objektorienterad programmering i C++ I

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Tentamen OOP

STRÄNGAR DATATYPEN. Om du vill baka in variabler eller escape-tecken måste du använda dubbla citattecken. strängar

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

4 Sammansatta datatyper

Lämna in en ifylld kursvärdering tillsammans med tentan! Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl

Tentamen i Grundläggande Programvaruutveckling, TDA548

I ett program hantera man ofta samlingar av objekt av samma typ.

Transkript:

Strängar En sträng i C är helt enkelt en array av char: char namn[20]; För att få strängar att bete sig som om de vore av dynamisk längd markeras strängens slut med null-tecknet \0 : J o z e f S w i a t y c k i \0 Biblioteksfunktioner för stränghantering, i/o-operationer mm behandlar strängar fram till första påträffade null-tecknet. Exempel: vill man i ovanstående exempel ta bort efternamnet och endast behålla förnamnet räcker det med att göra namn[5]= \0 ; Det friställer givetvis inte utrymmet, men stränghanterings- och i/o-funktioner kommer att endast behandla tecknen fram till \0. Bild 34 Strängar (forts.) En strängkonstant skrivs inom dubbla citationstecken: Jozef Kompilatorn lägger till ett null-tecken vid lagring av konstanten, skall man deklarera ett utrymme för den måste det alltså finnas plats för ett extra tecken. Eftersom det inte finns operationer för hela arrayer måste strängar kopieras, jämföras osv. tecken för tecken. Det finns dock färdiga biblioteksfunktioner för detta, främst i string.h En char-array kan dock som vanligt initieras vid definitionen - kompilatorn kopierar in strängen då: char namn[6]= Jozef ; Obs! igen att detta endast är tillåtet vid initiering, inte i tilldelningssatser. Obs! vidare att utrymmet måste rymma det avslutande null-tecknet. Vid initiering kan antalsangivelsen utelämnas (som vanligt): char namn[]= Jozef Swiatycki ; Bild 35 1

string-biblioteket Innehåller rutiner för kopiering, jämförelse av och sökning i strängar (str-funktioner) samt ospecificerade minnesareor (mem-funktioner). Tillgänglig genom #include <string.h> Viktigaste: char *strcpy(char *dest, const char *source); Kopierar från source till dest (tom första påträffade null-tecknet). Returnerar dest. char *strncpy(char *d, const char *s, int n); Kopierar som mest n tecken från s till d (tom första påträffade null-tecknet). Returnerar dest. Även för många andra str-funktioner finns n -varianter. char *strcat(char *dest, const char *source); Kopierar source till slutet på dest, returnerar dest. int strcmp(const char *s1, const char *s2); Jämför s1 och s2, returnerar positivt om s1 > s2, 0 om s1 == s2, negativt om s1 < s2. int strlen(const char *str); Returnerar strängens längd fram till (exklusive) första null-tecknet. Bild 36 string-biblioteket, forts. char *strchr(const char *s, int c); Returnerar den först påträffade förekomsten av tecknet c i strängen s (eller NULL) char *strstr(const char *s1, const char *s2); Returnerar den först påträffade förekomsten av strängen s2 i strängen s1 (eller NULL) char *strtok(char *s, const char *delimiters); Används för att få pekare till delsträngar i s, avgränsade av tecknen i delimiters. Vid första anropet returneras pekare till det först påträffade tecknet som inte ingår i delimiters och nästa påträffade delimiter-tecknet skrivs över med \0. Vid efterföljande anrop ska s vara NULL och strtok ger pekare till nästa delsträng (har tydligen en statisk pekare till strängen internt). Returnerar NULL när inget icke-delimiter-tecken påträffats. Obs! förändrar s! Får inte användas på strängkonstanter! Exempel: char line[] = Vilken, konstig; funktion! ; char *word = strtok(line,,;! ); while (word!= NULL){ printf( %s\n, word); word = strtok(null,,;! ); } Bild 37 2

ctype-biblioteket I standardbiblioteket ctype (tillgänglig genom #include <ctype.h>) finns det ett antal funktioner för test av enskilda tecken. Dessa funktioner tar in ett tecken som argument (argumentet är en int för att även kunna ta emot EOF) och returnerar 1 om tecknet uppfyller testet, 0 annars. Exempel på funktionerna: int isalpha(int c); -är c en bokstav int isdigit(int c); -är c ett siffertecken int islower(int c); -är c en gemen bokstav Det finns även två funktioner för omvandling mellan gemena och versaler: int tolower(int c); - returnerar motsvarande gemen int toupper(int c); - returnerar motsvarande versal Testerna och omvandlingarna gäller per default endast engelska bokstäver, men kan fås att fungera för svenska bokstäver genom att man sätter svensk locale : #include <locale.h>... int main(void){ setlocale(lc_ctype, sv_se ); Bild 38 Introduktion till stdio Bibliotek innehållande symboliska konstantnamn, typer och rutiner för input och output. Man får tillgång till dessa genom #include <stdio.h> I Unix betraktas alla filer som strömmar av bytes, ingen skillnad görs mellan textfiler och binärfiler. All tolkning av data är C-programmats ansvar. På andra system kan det dock finnas skillnader mellan textfiler och binärfiler (främst hantering av radslut på textfiler). stdio definierar typen FILE för filobjekt. Rutiner för filhantering tar emot pekare till sådana objekt som argument, vissa returnerar sådana pekare. En egen filvariabel skall alltså deklareras som FILE *: FILE *minfil; Bild 39 3

Standardfiler Vid programstarten finns tre filer öppnade: stdin - öppnad för input och kopplad normalt till tangentbordet stdout - öppnad för output och kopplad normalt till skärmen stderr - även den öppnad för output och kopplad till skärmen stdin stdout programmet stderr Anledningen till att det finns två standard-outputfiler kopplade normalt till skärmen är att stdin och stdout kan vara omdirigerade till skivminnesfiler eller kopplade till andra processers stdout resp. stdin genom pipes. Även i sådana situationer vill man dock att felmeddelanden skall skrivas ut på skärmen - därför finns stderr. Felmeddelanden bör alltså alltid skrivas på stderr. Bild 40 Repetition - omdirigering och pipes Omdirigering görs från kommandoraden där programmet startas. Omdirigering av stdin görs med < filnamn, t.ex.: prog < minfil prog kommer nu att läsa stdin från filen minfil istf. tangentbordet. Omdirigering av stdout görs med > filnamn, t.ex.: prog > minfil prog kommer nu att skriva stdout på filen minfil istf. skärmen. Även stderr kan omdirigeras till en fil, med 2> filnamn, t.ex.: prog 2> minfil En pipe innebär att ett programs stdout kopplas till ett annat programs stdin, detta görs från kommandoraden med tecknet, t.ex.: prog1 prog2 Allt detta sker från kommandoraden, transparent för C-programmet. Bild 41 4

Formatterad i/o mot stdin och stdout int printf(const char *format,...); Konverterar sina argument enligt formatsträngen och skriver ut dem på stdout. Returnerar antalet utskrivna tecken eller EOF om fel har inträffat. Exempel: printf( Priset är %d kronor och %d öre\n, k, p); int scanf(const char *format,...); Läser tecken från stdin, matchar dem mot formatsträngen, konverterar enligt formatsträngen och lägger i de variabler vilkas adresser anges efter formatsträngen. Returnerar antalet gjorda konverteringar. Avbryter vid första felet. Exempel: int tim, min; printf( Vad är klockan? ); scanf( %d:%d, &tim, &min); Bild 42 Viktigaste symboler i formatsträngen: Konverteringsangivelser %d - argumentet är en int, textrepresentationen decimal %c - argumentet är en char %s - argumentet är en sträng, dvs. char * (utrymme måste finnas) %f - argumentet är en double Mellan % och konverteringssymbolen kan man ange fältbredden, antalet decimaler, vänsterjustering o.s.v. med notationer som ändrar betydelse beroende på konverteringstypen och om det är fråga om utskrift eller inläsning. scanf slutar vid påträffat radslut och lämnar radslutet kvar i bufferten. Man bör därför tömma bufferten efter ett scanf-anrop: scanf( %d, &tal); while (getchar()!= \n ) ; Bild 43 5

Egna filer Deklaration: FILE *minfil; Öppnande: FILE *fopen(const char *name, const char *mode); Försöker öppna filen med det namnet name för operationer enligt mode. Returnerar pekare till stdios FILE (vad det nu är) eller NULL vid misslyckande. mode kan vara: r - input w - output r+ - input och output på en existerande fil w+ - input och output på en ny fil a - tillägg i slutet på en existerande fil samt några varianter på dessa. Stängning: int fclose(file *file); Stänger filen. Returnerar 0 vid lyckad operation, EOF vid misslyckad. Bild 44 Formatterad i/o mot filer och strängar I/O mot filer motsvarande printf och scanf: int fprintf(file *file, const char *format,...); int fscanf(file *file, const char *format,...); Motsvarande konverteringar mot strängar: int sprintf(char *buffer, const char *format,...); int sscanf(char *buffer, const char *format,...); Bild 45 6

Bytevis (teckenvis) I/O int getc(file *file); int fgetc(file *file); Läser in en byte från filen file och returnerar den som en int. Om det inte fanns någon mer byte att läsa returneras EOF, därför är returtypen int. int getchar(void); Som ovan fast från stdin. int ungetc(int c, FILE *file); Stoppar tillbaka tecknet c på filen file (som skall vara öppen för input). Egentligen läggs tecknet i bufferten. Garanteras fungera endast en gång per inläsning. Returnerar c eller EOF vid misslyckande. int putc(int c, FILE *file); int fputc(int c, FILE *file); Skriver ut tecknet c på filen file, returnerar det utskrivna tecknet. int putchar(int c); Som ovan fast till stdout. Bild 46 Radvis i/o (strängar) char *gets(char *buff); Läser in tecken från stdin in i utrymmet som pekas ut av buff, slutar vid radslut eller filslut. Radslutstecknet läses men stoppas inte in i buff, däremot stoppas in ett null-tecken efter sista inlästa tecknet. Returnerar buff. Obs! Ingen kontroll att utrymmet räcker, bör därför inte användas. char *fgets(char *buff, int max, FILE *file); Läser in tecken från filen file in i utrymmet som pekas ut av buff, slutar vid radslut eller filslut. Läser dock högst max-1 tecken. Om radslut påträffas bland de max-1 tecknen så stoppas den in i buff. Ett null-tecken stoppas in efter sista inlästa tecknet. Returnerar buff eller NULL om det inte fanns mer att läsa. int fputs(const char *str, FILE *file); Skriver ut strängen str på filen file. Returnerar EOF vid fel. int puts(const char *str); Som ovan fast mot stdout. Bild 47 7