Stringovi - string: niz znakova koji završava NULL znakom \0 (ascii kod 0) - svaki string po konvenciji završava NULL znakom → da bi spremili string od n znakova trebamo polje dužine n+1 - sljede ´ ci na ˇ cini inicijalizacije stringa su ekvivalentni ’\0’ ’b’ ’l’ ’a’ ’b’ ’l’ ’a’ A char A[] = "blabla"; char A[] = {’b’,’l’,’a’,’b’,’l’,’a’,’\0’}; - uo ˇ cite upotrebu dvostrukih navodnika kod inicijalizacije stringa Osnove programiranja – p. 1/12
55
Embed
Stringovi - phy.pmf.unizg.hrtniksic/FI/materijali/OLD/stringovi.pdf · Osnove programiranja – p. 1/12. Ispisivanje stringova - string možemo ispisati printf naredbom koristeci
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Stringovi
- string: niz znakova koji završava NULL znakom \0(ascii kod 0)
- svaki string po konvenciji završava NULL znakom → dabi spremili string od n znakova trebamo polje dužinen+1
- sljedeci nacini inicijalizacije stringa su ekvivalentni
char str[]="Ja sam pravi string";printf("%s\n",str);str[5]=’M’;str[10]=’V’;printf("%s\n",str);str[10]=’\0’;printf("%s\n",str);str[10]=’v’;printf("%s\n",str);
- string možemo ispisati scanf naredbom koristeciidentifikator %s
- niz završava prvom bjelinom u ulaznom nizu znakova
- iza posljednjeg ucitanog znaka automatski se dodajeNULL znak ’\0’
char str[];scanf("%s",str);
- svako polje koje je argument funkcije interpretira se kaopointer na prvi element polja pa se ispred varijable str uscanf ne stavlja adresni operator &
Osnove programiranja – p. 4/12
- koristeci znak konverzije %s nije moguce ucitati stringkoji u sebi sadrži bjeline jer one služe za ogranicavanjeulaznog polja
- za ucitavanje stringova koji ukljucuju bjeline koristimouglate zagrade kao znak konverzije
- unutar uglatih zagrada navodimo niz znakova, a ucitavase najveci niz sastavljen od znakova navedenih unutaruglatih zagrada
- Važno! prije identifikatora %[ treba ostaviti razmak kojifunkciji scanf govori da preskoci sve bjeline kojeprethode znakovnom nizu
- nužno ako to nije prva scanf jer ona uvijek ostavljazavršni znak prijelaza u novi red u ulaznom nizu
Osnove programiranja – p. 5/12
Primjer:
char str[128];printf("Unesite string sastavljen od malih slova i razmaka\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);printf("Jos jedan...\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);
UNOS ISPIS
mali string
- scanf ucitava string sastavljen od malih slova i razmaka
- uocite razmak izmedu dvostrukog navodnika iidentifikatora %[, kao i razmak izmedu identifikatora %[ iznaka a
- korisnik unosi niz mali string
Osnove programiranja – p. 6/12
Primjer:
char str[128];printf("Unesite string sastavljen od malih slova i razmaka\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);printf("Jos jedan...\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);
UNOS ISPIS
mali string
- program ispisuje cijeli uneseni niz mali string
Osnove programiranja – p. 6/12
Primjer:
char str[128];printf("Unesite string sastavljen od malih slova i razmaka\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);printf("Jos jedan...\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);
UNOS ISPIS
mali STRING
- korisnik unosi niz mali STRING
- funkcija scanf ucitava niz do pojave velikih slova jer onanisu navedena u uglatim zagradama identifikatora
Osnove programiranja – p. 6/12
Primjer:
char str[128];printf("Unesite string sastavljen od malih slova i razmaka\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);printf("Jos jedan...\n");scanf(" %[ abcdefghijklmnopqrstuvwxyz]",str);printf("%s\n",str);
UNOS ISPIS
mali
- program ispisuje samo dio niza s malim slovima
Osnove programiranja – p. 6/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
0
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
0
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
1
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
1
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
2
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
2
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
3
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
3
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
Osnove programiranja – p. 7/12
Primjer: usporedivanje dva stringa
char A[]="mama";char B[]="mamA";int i;for(i=0; A[i] !=’\0’ || B[i] != ’\0’;i++){ if( A[i] != B[i]) { printf("A i B su razliciti\n"); break; }}
A[0] A[1] A[2] A[3] A[4]
’m’ ’a’ ’m’ ’a’ ’\0’
B[4]B[0] B[1] B[2] B[3]
’m’ ’a’ ’m’ ’A’ ’\0’
i
3
- uocite uvjet u for petlji: provjerava se da li smo neki odstringova procitali do kraja tj. da li je A[i] ili B[i] jednakNULL znaku
- uvjet u for petlji: provjeravamo da li je niz procitan dokraja tj. da li je A[i] NULL znak
- za svaki clan niza provjerimo da li je jednak ’a’ i ako jestzamijenimo ga s ’A’
Osnove programiranja – p. 8/12
String Library
- string.h je header posebne biblioteke koja sadržikorisne funkcije za manipulaciju stringovima
- ukljucujemo je prije funkcije main predprocesorskomnaredbom #include<string.h>
- funkciju strlen(s) koristimo da bi odredili dužinu stringa s
- funkciju strcmp(s1,s2) koristimo da bi usporedilistringove s1 i s2
- funckiju strcpy(s1,s2) koristimo da bi kopirali string s2 ustring s1
- string library sadrži još mnogo funkcija
Osnove programiranja – p. 9/12
Primjer: funkcija strlen(s)
#include <stdio.h>#include <string.h>
int main(){ char A[]="Primjer stringa"; int duzina = strlen(A); printf("Duzina stringa A: %d\n",duzina); return 0;}
ispis
- prije funkcije main moramo ukljuciti string library
Osnove programiranja – p. 10/12
Primjer: funkcija strlen(s)
#include <stdio.h>#include <string.h>
int main(){ char A[]="Primjer stringa"; int duzina = strlen(A); printf("Duzina stringa A: %d\n",duzina); return 0;}
ispis
- inicijaliziramo string A
Osnove programiranja – p. 10/12
Primjer: funkcija strlen(s)
#include <stdio.h>#include <string.h>
int main(){ char A[]="Primjer stringa"; int duzina = strlen(A); printf("Duzina stringa A: %d\n",duzina); return 0;}
ispis
- funkcija strlen(A) vraca dužinu stringa A
Osnove programiranja – p. 10/12
Primjer: funkcija strlen(s)
#include <stdio.h>#include <string.h>
int main(){ char A[]="Primjer stringa"; int duzina = strlen(A); printf("Duzina stringa A: %d\n",duzina); return 0;}
ispis
Duzina stringa A: 15
- program ispisuje dužinu stringa A
Osnove programiranja – p. 10/12
Primjer: funkcija strcmp
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite prvi niz znakova (max. 100)\n"); scanf("%s",A); printf("Unesite drugi niz znakova (max 100)\n"); scanf("%s",B); int iflag = strcmp(A,B); if(iflag == 0) printf("Nizovi A i B su jednaki\n"); else printf("Nizovi A i B su razliciti\n"); return 0;}
ispis
A
B
- prije funkcije main moramo ukljuciti string library
Osnove programiranja – p. 11/12
Primjer: funkcija strcmp
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite prvi niz znakova (max. 100)\n"); scanf("%s",A); printf("Unesite drugi niz znakova (max 100)\n"); scanf("%s",B); int iflag = strcmp(A,B); if(iflag == 0) printf("Nizovi A i B su jednaki\n"); else printf("Nizovi A i B su razliciti\n"); return 0;}
ispis
A
B
prviNiz
- korisnik upisuje string A
Osnove programiranja – p. 11/12
Primjer: funkcija strcmp
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite prvi niz znakova (max. 100)\n"); scanf("%s",A); printf("Unesite drugi niz znakova (max 100)\n"); scanf("%s",B); int iflag = strcmp(A,B); if(iflag == 0) printf("Nizovi A i B su jednaki\n"); else printf("Nizovi A i B su razliciti\n"); return 0;}
ispis
A
B
prviNiz
drugiNiz
- korisnik upisuje string B
Osnove programiranja – p. 11/12
Primjer: funkcija strcmp
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite prvi niz znakova (max. 100)\n"); scanf("%s",A); printf("Unesite drugi niz znakova (max 100)\n"); scanf("%s",B); int iflag = strcmp(A,B); if(iflag == 0) printf("Nizovi A i B su jednaki\n"); else printf("Nizovi A i B su razliciti\n"); return 0;}
ispis
A
B
prviNiz
drugiNiz
- funkcija strcmp(A,B) vraca vrijednost 0 ako su stringovijednaki
Osnove programiranja – p. 11/12
Primjer: funkcija strcmp
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite prvi niz znakova (max. 100)\n"); scanf("%s",A); printf("Unesite drugi niz znakova (max 100)\n"); scanf("%s",B); int iflag = strcmp(A,B); if(iflag == 0) printf("Nizovi A i B su jednaki\n"); else printf("Nizovi A i B su razliciti\n"); return 0;}
ispis
A
B
prviNiz
drugiNiz
- iflag nije jednak 0 jer su stringovi razliciti
Osnove programiranja – p. 11/12
Primjer: funkcija strcmp
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite prvi niz znakova (max. 100)\n"); scanf("%s",A); printf("Unesite drugi niz znakova (max 100)\n"); scanf("%s",B); int iflag = strcmp(A,B); if(iflag == 0) printf("Nizovi A i B su jednaki\n"); else printf("Nizovi A i B su razliciti\n"); return 0;}
ispis
A
B
prviNiz
drugiNiz
Nizovi A i B su razliciti
- iflag nije jednak 0 jer su stringovi razliciti
Osnove programiranja – p. 11/12
Primjer: funkcija strcpy(s1,s2)
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite niz znakova (max. 100)\n"); scanf("%s",A); strcpy(B,A); printf("Orginalni niz A: %s\n",A); printf("Kopija niza A: %s\n",B); return 0;}
A[0]A[1] A[2]A[3]
B[0] B[1]B[2] B[3]
ispis
- prije funkcije main moramo ukljuciti string library
Osnove programiranja – p. 12/12
Primjer: funkcija strcpy(s1,s2)
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite niz znakova (max. 100)\n"); scanf("%s",A); strcpy(B,A); printf("Orginalni niz A: %s\n",A); printf("Kopija niza A: %s\n",B); return 0;}
A[0]A[1] A[2]A[3]
B[0] B[1]B[2] B[3]
ispis
’n’ ’i’ ’z’ ’\0’
- korisnik upisuje string A
Osnove programiranja – p. 12/12
Primjer: funkcija strcpy(s1,s2)
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite niz znakova (max. 100)\n"); scanf("%s",A); strcpy(B,A); printf("Orginalni niz A: %s\n",A); printf("Kopija niza A: %s\n",B); return 0;}
A[0]A[1] A[2]A[3]
B[0] B[1]B[2] B[3]
ispis
’n’ ’i’ ’z’ ’\0’
’n’ ’i’ ’z’ ’\0’
- funkcija strcpy kopira string A u string B
Osnove programiranja – p. 12/12
Primjer: funkcija strcpy(s1,s2)
#include <stdio.h>#include <string.h>int main(){ char A[101],B[101]; printf("Unesite niz znakova (max. 100)\n"); scanf("%s",A); strcpy(B,A); printf("Orginalni niz A: %s\n",A); printf("Kopija niza A: %s\n",B); return 0;}