/****************************************
*
*   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 ?