Текстуални низи во С++ Низи од знаци C++ овозможува работа со текстуални податоци на неколку начини. Покрај со користење на класата string со која ќе се запознаеме подоцна, во C++ е дозволена работа со текстуални податоци и преку нивно третирање како низа од знаци. Низи од знаци се креираат на ист начин како и останатите еднодимензионални низи: char ime[N]; Притоа, ime го означува името на променливата, додека N го означува бројот на знаци (од колку елементи е составена низата ime). Еден од овие N знаци (зависно од текстуалниот податок кој ќе се чува во низата) ќе биде еднаков на '\0' - и ќе претставува т.н. null знак или null terminator. Овој знак е потребен за да го означи крајот на текстуалниот податок и да ни овозможи во низа со големина N да чуваме текстуални елементи кои се пократки од N знаци. На следната слика е претставен начинот на сместување на текстуални податоци во низата од знаци name[13]:
На овој начин, кога сакаме да печатиме податоци, програмата знае дека треба да печати знаци сé додека не стигне до знакот '\0'. Сите знаци по '\0' се неважни и не се користат. Пр. 1 char name[] = {'D', 'a', 'r', 'k', 'o', '\0'}; //treba da se navede '\0'
2 char name[] = "Darko";
//se podrazbira '\0' И двата начина прикажани погоре креираат низа name со големина 6. Низата го содржи текстуалниот податок "Darko" и null знак '\0' за означување на крај на текстот. Бидејќи низите имаат големина која се дефинира при нивното креирање, не е дозволено подоцнежно менување на нивната вредност преку користење на операторот '=' (кај string класата ова е дозволено - таа работи со динамички резервирана меморија). На пример, следниов код е погрешен:
char name[] = "Darko";
Пр.
#include <iostream>
int main() {
char text[100];
zbor cout << text;
//go pechati vneseniot zbor }
Во програмата дадена погоре, наредбата cin >> text; чита еден збор внесен од страна на корисникот и, истиот го сместува во променливата text. На крајот од текстот, автоматски, се додава и null знак. Бидејќи cin чита податоци до првото појавување на празно место, tab или знак за нов ред, доколку сакаме да прочитаме цел ред текст (наместо само еден збор или број), потребно е да ја искористиме функцијата cin.getline(char[], N)
2. Функции за работа со стрингови:
За работа со низи од карактери односно да може да ги користиме следните функции е неопходно да се вклучи на почеток библиотеката т.е да се напише предпроцесорската наредба #include <cstring> Постојат 7 основни функции кои овозможуваат работа со текстуални низи (сите дефинирани во датотеката "<cstring>"): • strlen(niza) - ја враќа должината на низата niza (без null знак) • strcpy(destinacija, izvor) - копира текстуална низа (од izvor во destinacija), вклучувајќи го и null знакот. Внимавајте: низата destinacija треба да има доволна големина за да ги собере сите знаци од izvor. • strncpy(destinacija, izvor, N) - копира најмногу N знаци од текстуална низа (од izvor во destinacija). Знакот '\0' ќе се ископира само доколку се појави во првите N знаци - инаку, истиот мора да го додадеме самите. Внимавајте: низата destinacija треба да има доволна големина за да ги собере сите потребни знаци.
•
strcmp(prva, vtora) - споредува две низи (резултатот е 0
ако низите се еднакви, инаку е 1 и променливата во која се сместува резултатот
се деклрирана како логичка променива)
• strcat(prva, vtora) - ја надоврзува низата vtora на prva. Внимавајте: низата prva треба да има доволна големина за да ги соберете знаците од двете низи. • strncat(prva, vtora, N) - ги надоврзува првите N знаци (или помалку, ако '\0' се појави претходно) од низата vtora на prva. Внимавајте: низата prva треба да има доволна големина за да ги собере сите потребни знаци.
3. Функции за работа со знаци: - isalpha(ch) – true ако ch е алфабетски знак инаку false - isupper(ch) - true ако ch е голема буква инаку false - islower(ch)- true ако ch е мала буква инаку false - isdigit(ch)- true ако ch е цифра од 0 до 9 инаку false - toupper(ch), tolower(ch) – претвораат во мала т.е. во голема буква
Пр.
Програма со која даден текст внесен преку тастатура се печати . #include<iostream>
#include<cstring>
int main() { char tekst[100]; //se deklarira promenliva koja se vika tekst i moze da sodrzi najmnogu 100 znaci (karakteri)
int i,dolzina; cin.getline(tekst,100); //cin.getline ja cita promenlivata tekst sto se vnesuva preku tastatura
dolzina=strlen(tekst);
//strlen ja naogja dolzinata na promenlivata tekst cout<<"Go pecatam tekstot :"<<endl;
for(i=0;i<=dolzina-1;i++) }
Пр.
Програма со која даден внесен текст преку тастатура се печати во
обратен редослед. #include<iostream>
#include<cstring> int main() { char tekst[100]; //se deklarira promenliva koja se vika tekst i moze da sodrzi najmnogu 100 znaci (karakteri) int i,dolzina;
cout << "Vnesi
tekst: ";
dolzina=strlen(tekst); //strlen ja naogja
dolzinata na promenlivata tekst, cout<<"Go pecatam tekstot:"<<endl;
for(i=dolzina-1;i>=0;i--)
int main() { char tekst1[100],tekst[100];
int i,dolzina; cin.getline(tekst,100); cout << "Vnesi uste eden tekst: "; cin.getline(tekst1,100);
t=strcmp(tekst, tekst1);
cout<<"Tekstovite se isti";
cout<<"tekstovite ne se isti"; } Пр. Програма со која се проверува дали внесениот текст е палиндром или не. (Палиндром е текст кој се чита исто во двете насоки – од лево кон десно и од десно кон лево) #include<iostream>
#include<cstring>
int main(){ char tekst[100],tekst_obratno[100];
bool palindrom; cin.getline(tekst,100); dolzina=strlen(tekst); for(int i=dolzina-1;i>=0;i--) tekst_obratno[i]=tekst[dolzina-i-1]; for(int i=0;i<=dolzina-1;i++) { if (tekst[i]==tekst_obratno[i]) palindrom=true; else { palindrom=false; cout<<"Vneseniot tekst ne e palindrom"<<endl; break; } } if (palindrom==true)
cout<<"Vneseniot
tekst e palindrom"<<endl; } Пр. Програма што ќе избори и печати колку мали самогласки има во една реченица внесена од тастатура
#include<iostream> int main()
{ cin.getline(tekst,100); dolzina=strlen(tekst); for(int i=dolzina-1;i>=0;i--) { if (tekst[i]=='a' || tekst[i]=='o' || tekst[i]=='e' || tekst[i]=='i' ||tekst[i]=='u') b++;
} } Пр. програма со која се определува колку знаци во дадена низа знаци се букви. #include <iostream> #include <cstring> using namespace std; int main() { char a[100]; int d,i,b=0; cout<<"Vnesi niza "<<endl;
cin.getline(a,100); for(i=0;i<=d-1;i++) if (isalpha(a[i])) b++; cout<<"ima "<<b<<" bukvi "; return 0; } Пр. Програма со која сите букви во дадена низа знаци се претвораат во
мали.
int main() { char a[100]; int d,i; cout<<"Vnesi niza "<<endl; cin.getline(a,100);
d=strlen(a);
cout<<a[i]; } Пр. програма со која од дадена низа знаци се печатат само буквите #include<iostream>
#include<cstring>
int main() {
char tekst[100]; cout << "Vnesi tekst: "; cin.getline(tekst,100); dolzina=strlen(tekst); for(int i=0;i<=dolzina-1;i++) { if (((tekst[i]>='a'&& tekst[i]<='z')) || ((tekst[i]>='A'&& tekst[i]<='Z'))) cout<<tekst[i];
} } Или: #include<iostream> #include<cstring> using namespace std;
int main()
int i,dolzina,j=0; cin.getline(tekst,100); dolzina=strlen(tekst); for(int i=0;i<=dolzina-1;i++) { if (((tekst[i]>='a'&& tekst[i]<='z')) || ((tekst[i]>='A'&& tekst[i]<='Z'))) { a[j]=tekst[i]; j++;
} for(i=0;i<j;i++) cout<<a[i]; return 0; }
|