Операције са стринговима

Учитавање стрингова

При учитавању стрингова треба водити рачуна о две ствари: како резервисати меморију за чување стринга и како применити функцију за учитавање стринга. На почетку рада потребно је одредити максималну дужину стринга који ће се учитавати да би компајлер доделио тражени меморијски прoстор.

На пример, декларацијом

char ime[101];

уводи се низ ime од највише сто једног елемента.

Учитавање се може реализовати помоћу две библиотечне функције scanf() и gets().

Функција gets()
За учитавање стрингова функција gets() се чешће користи од scanf(). Она прихвата знаке са тастатуре док не наиђе на знак за „нову линију“ (‘\n’) који се производи притиском на тастер ENTER. Она игнорише знак за „нову линију“ и додаје завршни или нулти знак (‘‘) стринга.

Функција gets() има следеће заглавље:

char *gets(char *s) /* ove zvezdice oznacavaju pokazivace */

где је аргумент s показивач на стринг. Функција којој се предаје учитани низ као аргумент предаје име низа који је у ствари адреса нултог елемента низа у који се копирају вредности које прослеђује gets(). Међутим, треба водити рачуна да је вредност функције показивач на адресу до које је учитан стринг ако је учитавање коректно, у противном вредност је NULL (нулта вредност која је дефинисана у фајлу stdio.h са 0).
Контрола улаза се може реализовати на следећи начин:

while (gets(ime)==NULL);

Пример учитавања стринга:

#include<stdio.h>
 main()
 {
      char ime[101];
      char *pok,*gets();
      printf("Unesi jedno ime:\n");
      pok=gets(ime);
      printf("1. nacin za ispis ucitanog imena \n(koristi se adresa stringa):%s\n",ime); /*koristi se adresa stringa ime*/
      printf("2. nacin za ispis ucitanog imena \n(koristi se rezultat funkcije gets):%s\n",pok); /*adresa stringa ime, ali koju vraca funkcija gets()*/
 }

Ако се не врши контрола коректног учитавања функција gets() се може позивати на следећи начин:

gets(ime);

и тада се не мора декларисати: char *gets()

Тако да би претходни пример изгледао:

#include<stdio.h>
 main()
 {
      char ime[101];
      char *pok;
      printf("Unesi jedno ime:\n");
      pok=gets(ime);
      printf("1. nacin (adresa stringa):%s\n",ime); /*koristi se adresa stringa ime*/
      printf("2. nacin (rezultat funkcije gets):%s\n",pok); /*adresa stringa ime, ali koju vraca funkcija gets()*/
 }

Функција scanf()

За разлику од функције gets() kоја је погодна за учитавање стрингова функција scanf() омогућава учитавање мешовитих података у стандардној форми. Функција scanf() враћа број учитаних и додељених података. Ако је улаз некоректан враћа нулу.

Пример учитавања стринга:

#include<stdio.h>
 main(){
      char ime1[50],ime2[60];
      int brojac,god;
      printf("Unesite ime i prezime.\n");
      brojac=scanf("%s%5s", ime1,ime2); /* funkcija scanf kao rezultat vraca broj ucitanih podataka! */
      printf("Ucitana su %d podatka: %s  i %s .\n" ,brojac,ime1,ime2);
 }

Испис стрингова

За испис стрингова се користе две библиотечке функције puts() и printf(). Функција puts() исписује само стрингове, а printf() може исписивати мешовите податке.

Функција puts()
Ова функција има само један аргумент – показивач на почетну тачку стринга (или подстринга) који треба исписати. Ова функција исписује све знаке почев од тачке на коју показује аргумент функције до завршиног знака (‘‘) кога замењује знаком за „нову линију“ тако да се после исписа стринга прелази на нову линију.
Заглавље функције puts() има следећи облик:

int puts(char *string); /* neophodno je pre primene funkcije puts deklarisati string */

пример:

char MojString[20];
puts(MojString);

Позив функције puts исписује стринг MojString, и курсор пребацује у нови ред.

Уколико се у току излаза стринга појави грeшка функција враћа вредност EOF (једнако -1), ако нема грeшке враћа ненегативну вредност.
Следећи програм илуструје неколико начина за испис стринга:

#include<stdio.h>
 main()
 {
      static char s1[]="Metode programiranja";
      static char *s2="Objektno programiranje";
      puts(s1);
      puts(s2);
      puts( &s1[3]); /* prikazuje string s1, pocev od lokacije sa indeksom 3 */
      puts(s1+2); /* prikazuje string s1, ali na njegovu pocetnu adresu dodajemo 2, tako da se ispisuje string pocevsi od pozicije sa indeksom 2 */
      puts(s2+9);
      puts("I ovaj string prihvata puts()."); /* funkcijom puts moguce je prikazivati tekst izmedju navodnika, slicno kao kod funkcije printf */
 }

Извршавањем програма исписује се:

Функција printf()

Да би функција printf исписала стринг, потребно је користити улазну конверзију за стрингове: %s:

printf("%s", Kopija);

Овако написана функција printf неће курсор пребацити у нови ред. Ако хоћемо да курсор пребацимо у нови ред, потребно је додати знак за прелазак у нови ред: ‘\n’, тако да функција printf добија следећи изглед:

printf("%s\n", Kopija); /* ima isti efekat kao i puts(string); */

делови текста преузети са адресе STRINGOVI

Advertisements

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се / Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се / Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се / Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се / Промени )

Повезивање са %s