/****************************************
*
* C/C++ vaja X_3
*
*
* utrjevanje /3
*
*/
1.naloga
Katera od naslednji deklaracij je deklaracija niza znakov (legalnega stringa v C/C++):
a) char* niz;
b) char* nit = "blabla";
c) char *niz;
d) char niz[]={'b','l','a','b','l','a','\0'};
e) char niz[5];
f) char *niz='ecika';
2.naloga
Dan je niz :
char* jkl="ecikapecika";
a) koliko zlogov pomnilnika zaseda deklaracij z inicializacijo? Razložite.
b) ali lahko izvedete ukaz : jkl++ ? Zakaj ?
c) kako izpišemo niz 'jkl' na zaslon ?
d) kako bi s programom prešteli število črk v nizu 'jkl' ?
3.naloga
#include <iostream.h>
int main(){
char *s1="koliko", s2="tri";
cout << s1 << ' ' << s2 << endl;
s1=s2;
cout << s1 << ' ' << s2 << endl;
return 0;
}
a) ugotovite, če program deluje.
b) obrazložite delovanje programa.
c) razložite obnašanje programa, če pred stavek 'return' dodate še vrstico :
s1="ecikapecikapostopelja,pa se tazvrne";
4.naloga
Katere možnosti C/C++ ponujata pri rezervaciji prostora za poljuben niz znakov ?
(glej naloge 8-10)
5.naloga
Napišite C in C++ program, ki bosta s tipkovnice prebrala poljubne tri nize znakov in jih
izpisala na zaslon.
6.naloga
Ugotovite, kaj izvaja naslednji program :
#include<stdio.h>
int main(){
char *s1="abrakadabra",*s2="hamurabi";
char *a1=s1; *a2=s2;
int v=0;
while ((*a1++)&&(*a2++))
if (*a1==*a2) v++;
cout << v;
return 0;
}
7.naloga
a) Razložite delovanje naslednjega programa :
#include <stdio.h>
char *fff(char* bb){
char *c=(char*)malloc(10);
char *d=c;
*c++=*bb++;
*c='\0';
return d;
}
int main(){
char * c="bla";
c++;
printf("%s",fff(c));
return 0;
}
b) ali je možno funkcijo 'fff' optimizirati ? Kako ?
8.naloga
Oglejte si naslednja dva programa in poskusite razložiti, zakaj prvi program deluje drugi pa ne.
/ pazite na to kako se prenese parameter v podprogram in kaj se z vrednostjo parametra v
podprogramu dogaja /
a) #include <stdio.h>
void fff(char* bb){
*bb='2';
}
int main(){
char *c=(char*)malloc(10);
strcpy(c,"vigihej");
c++;
printf("%s",c);
fff(c);
printf("%s",c);
return 0;
}
b) #include <stdio.h>
void fff(char* bb){
*bb='2';
}
int main(){
char *c="vigihej";
c++;
printf("%s",c);
fff(c);
printf("%s",c);
return 0;
}
9.naloga
a) Kaj bi dogajalo s programom iz prejšnje naloge in parametrom podprograma , če sprememnljivko 'c'
deklariramo kot :
char c[]={'v','i','g','i','h','e','j','\0'};
b) Kaj se dogaja s prenešenim parametrom, če na začetek funkcije 'fff' dodamo stavek : bb++;
10.naloga
a) Realizirajte matode za manipulacijo z nizi :
char* leftStr(char* niz,int koliko); //basic: LEFT$
char* rightStr(char* niz, int koliko); //basic: RIGHT$
char* midStr(char* niz, int od_kje, int do_kje); //basic: MID$
char* copyStr(char* niz, int od_kje, int koliko); //pascal: copy
int posStr(char* podniz, char* niz); //pascal: pos
char* delStr(char* niz, int od_kje, int koliko); //pascal: delete
char* insStr(char *niz, char* vrinjeni, int_kam); //pascal: insert
b) po testiranju shrani (le) funkcije v datoteko z imenom 'strFunc.h'. Napišite program v C/C++ za
demonstracijo izvajanja funkcij iz a) razdelka te naloge, kjer v zaglavje dodate vrstico :
#include "strFunc.h"
poskrbite, da bo datoteka strFunc.h na iskalni poti datotek .h .
Kaj opazite ?