Stringovi

U C++ stringovi se implementiraju na dva načina.  Definicijom stringa kao niz karaktera koji završava null karakterom. Null karakter je bajt čiji su svi bitovi nule. Ovaj bajt se označava specijalnim simbolom „„.  Ako niz karaktera na kraju ne sadrži null karakter,  niz ne predstavlja string.

Pr:

char niz[6]={‘H’,’E’,’L’,’O’,“}

Drugi pristup za inicijalizaciju stringa koristi string konstantu, koja je niz karaktera pod znacima navoda

char niz[]=“Heloo!“

Programer  ne smešta null karakter na kraju string konstante, C++ kompajler automatski dodaje “ „, na kraju stringa kada inicijalizuje niz. Prilikom deklaracije se ne navodi broj karaktera koji čine string.

Pr.

Napravi program koji unosi naziv proizvoda i njegovu cenu i prikazuje unos na monitoru računara?

Rešenje.

#include <iostream>
#include <cstring>
using namespace std;

/* run this program using the console pauser or add your own getch, system(„pause“) or input loop */

int main(int argc, char** argv)
{

char text[100];
float cena;
cout<<„Unesi Naziv?“<<endl;
cin>> text;
cout<<“ Unesi cenu?“<<endl;
cin>> cena;
cout<<“ Nayiv proiyvoda je „<<text<<“ a cena „<< cena<<endl;
return 0;
}

Pr2. 

Koristeći klasu string spoji dva stringa u jedan?

Rešenje.

#include <iostream>
#include <string>
using namespace std;
int main()
{
string a, b;
a = "prvi";
b = "drugi";
a = a + " " + b;
cout << a << endl; //stampa 'prva druga'
b = b + b;
cout << b << endl; //stampa'drugadruga';
return 0;
}

Funkcije koje omogućavaju rada sa tekstualnim nizovima

  • strlen(char[] niz)– vrednost funkcije je dužina niza bez znak null
  • strcpy(char[] destinacija, char[] izvor)– kopira tekstualni niz sa izvora do destinacije uključujući i znak null
  • strncpy(char[] destinacija, char[] izvor, int N)– kopira najviše N znakova od izvora do destinacije, znak null se kopira samo ako spada u N znakova, inače se uvodi sam. Napomena: niz destinacija mora da bude dovoljno velik da bi primio sve znakove sa izvora
  • strcmp(char[] prvi, char[] drugi)– upoređuje niz prvi i niz drugi i kao vrednost daje 0 ako su nizovi jednaki
  • strncmp(char[] prvi, char[] drugi, int N)– upoređuje N znakova niza prvi i drugi i ako su isti dodeljuje vrednost 0
  • strcat(char[] prvi, char[] drugi)– dodaje nizu prvi niz drugi, niz prvi treba da bude dovoljno velik da prihvati i znakove niza drugi
  • strncat(char[] prvi, char[] drugi, int N)– nadovezije prvih N znakova niza drugi nizu prvi
Primer 3.
Kako se koristi funkcije klase string?

Rešenje.

char c[] = „tekst“;
char d[] = „tekst“;
cout << strlen(a) << endl; //stampa 8
cout << strlen(c) << endl; //stampa  ‘5’
char t[100];
strcpy(t, „Neka vrednost“); //t=“Neka vrednost“
strcpy(t, „Neshto drugo“); //t=“Neshto drugo“
strcpy(t, a); //t=“prvi niz“
strncpy(t, b, 5); //t=“drugi niz “ (ne kopira “)
t[5] = “; //t=“drugi“
strcat(t, b); //t=“drugi  niz“
cout << t << endl; //pechati ‘drugi drugi niza’
cout << strcmp(t, a) << endl; //pechati ‘1’
cout << strcmp(c, d) << endl; //pechati ‘0’
return 0;
}
slika
Pr.4
Unesi sadržaj  znakovnog niya i prikaži isti?
Rešenje.
#include <iostream>#include <cstring>
using namespace std;

/* run this program using the console pauser or add your own getch, system(„pause“) or input loop */

int main(int argc, char** argv)
{
string niz[10];
int i,n;
cout<<“ Koliko reci ima vas niz_“;
cin>>n;
for (i=0;i<n;i++)
{
cout<<“ unesi  „<<i+1<< “ element niya“<<endl;
cin>> niz[i];
}
for (i=0;i<n;i++)
{
cout<< niz[i]<<“ „;
}
return 0;
}
slika slika

Pr5.

Unesite ime, prezime, datum rođenja i tekuću godinu; Naravite program koji izračunava godine starosti za osobu čije podatke ste uneli?

Rešenje:

#include<iostream>

#include<string>

using namespace std;

int main()

{

            int god, god1, god2;

            string ime;

            cout<<„Upisi svoje ime:“;

            cin>>ime;

            cout<<endl<<„Upisi godinu svog rodjenja:“;

            cin>>god1;

            cout<<endl<<„Koja je godina sada? „;

            cin>>god2;

            god=god2-god1;

            cout<<endl<<ime<<“ ima „<<god<<“ godina.“<<endl;

            return 0;

}

slika

Primeri!!!!

Pr1.

Kreirajte program koji kreira jediničnu matricu Anxn?

Rešenje:

#include<stdio.h>;
int a[10][10];
main()
{
int i,j,n;
printf(„Unesite broj vrst(kolona)matrice?“);
scanf(„%d“,&n);
/*Kreiranje jedinecne matrice reda n*/
for (i=0;i<n;i++)
a[i][i]=1;
/*Prikaz jedinicne matrice*/
for(i=0;i<n;i++)
{
for (j=0;j<n;j++)
printf(„%d“,a[i][j]);
printf(„\n“);
}
return 0;
}

Pr2. Kreiraj niz  B koji ima n elementa, elemente niya B su inveryni elementima niya A?

Rešenje:

#include<stdio.h>
int A[10], B[10];
main()
{
/*unos elemenata niza A i kreiranje niza B*/
int i,j,n;printf(„Unesi broj elemenata niza?\n“);
scanf(„%d“,&n);
for(i=0;i<n; i++)
{
printf(„Unesi %d element niza\n „,i+1);
scanf(“ %d“,&A[i]);
B[i]=-A[i];
}
/*Prikaz starog i novoformiranog niza*/
printf(„Elementi niza A\n“);
for (i=0;i<n;i++)
printf(„%d\n“,A[i]);
printf(„Elementi niza B\n“);
for (i=0;i<n;i++)
printf(„%d\n“,B[i]);
return 0;
}

Pr.3

Napravi program koji sumira elemente matrice Amxm na glavnoj dijagonali?

Rešenje:

#include<stdio.h>
float a[10][10];
main()
{
int i,j,m,n;
float suma=0.0;
printf(„Unesite broj vrsta\n“,m);
scanf(„%d“,&m);
printf(„Unesi broj kolona\n“,n);
scanf(„%d“,&n);
/*Unos elemenata matrice*/
for (i=0;i<m;i++)
{
printf(„Unesi elemente %d vrste\n“,i+1);
for (j=0;j<n;j++);
scanf(„%f“,&a[i][j]);

}
for (i=0;i<m;i++)
{
for (j=0;j<n;j++)
suma+=a[i][i];
}
printf(„zbir elemenata matrice a na glavnoj dijagonali je%d „,suma);
return 0 ;
}

PR4. 

Napraviti program koji iydaje min element niya A kao i njegov indeks?

Rešenje:

/*Program koji izdaje min element niza i njegov index*/
#include <stdio.h>
/*deklaracija niza*/
int broj[5] ;

main()
{
int i,min,sn=0;

/* unos konkretne vrednosti preko tastature elemenima niza*/

for(i=0;i<5;++i)
{
printf(„Unesi %d broj“,i+1);
scanf(„%d“,&broj[i]);

}
/*Pronalazenje min od svih elemenata niza*/
min=broj[0]; sn=1;
for(i=0;i<5;++i)
{
if (broj[i]<min)
min=broj[i];sn=i;
}

printf(„minimalni element niza je %d\n“,min);
printf(„rec je o %d\ elementu niza“,sn);
return(0);
}

Pr5.

Napravite program koji unosi string i izdaje isti?

Rešenje:

#include<stdio.h>
main()
{
char s[100],*pok;
printf(„unesi string\n“);
gets(s);
pok=s;
while(*pok)
putchar(*pok++);
return 0;
}

Ispis stringova

Ya ispis stringova se koriste dve bibliotečne funkcije printf()- ispisuje mešovite podatke i puts()-ispisuje samo stringovi.

#include <stdio.h>

#define naslov „osnovi programiranja“

main()

{

static char s1[]={Metode programiranja“};

puts(naslov);

puts(s1);

puts(“ Iovaj string prihvata puts()“);

}

Nakon izvršavanja programa dobija se:

osnovi programiranja

Metode programiranja

I ovaj string prihvata puts()

Funkcija strlen()- argument funkcije je string, a funkcija vraća broj znakova bez  znaka  NULL. Za njeno korišćenje neophodno je uključiti <string.h> zaglavje.

pr: Koliko puta u stringu je yastupljen karakter x?

#include<stdio.h>
main()
{
char s[10],x,*pok;
int b=0;
printf(„Unesi karakter kako se broji\n“);
scanf(„%c“,&x);
printf(„Unesi strinf?\n“);
scanf(„%s“,s);

pok=s;

while(*pok)
{
/*printf(„proba%c“,*pok);*/
if (*pok++==x)
b++ ;

}
printf(„broj ponavljanja karaktera %c u stringu %s je %d\n „,x,s,b);
return 0;
}

pr.

 

Stringovi

String- jednodimenzionalni niz tipa char koji ne mora zauzimati sve elemente niza u kome se čuva. Da bi se znal gde se u nizu završava string dopisuje mu se završni ili NULL znak – „, koji je sastavni deo stringa.

Pr.

char poruka[10], *pokc;

poruka[0]=’z’;

poruka[1]=’d’;

poruka[2]=’r’

poruka[4]=’a’;

poruka[5]=’v’;

poruka[5]=’o’;

pokc=poruka;

while(*pokc!=“)

putchar(*pokc++);

Pored inicijalizacije „znak po znak“, strin se može inicijalizirati i string konstantom-niz znakova između znaka navodnika. Znaci između navodnika se plus završni znak se registruju u niz susednih memorijskih lokacija.  String konstanta „C“, nije ista sa znakovnom konstantom „C“, jer string konstanta sadrži i završni znak, “ „.

Stringovi se mogu inicijalizirati koriščenjem string konstante bilo da se čuvaju u statičkim, spoljašnim ili automatskim nzovima.

pr.

statik char s[]=“bah“

static char s[]={‘I’,’B’,’M’,“}(ako se izostavi znak  “, onda nije reč o stringu već o nizu znakova)

s- pokazivac na nulti element niza

s==&s[0], *s==’I’, *(s+1)=s[1]==’B’