<cstring>
Функции за менување на текстуални низи:
strcpy()
- копирање на една текстуална низа во
другаstrncpy()
- копирање на n бајти од една текстуална низа
во другаstrcat()
- надоврзува една текстуална низа на крајот на
другаstrncat()
- надоврзува n бајти од една текстуална низа
на крајот на другаФункции за менување на меморијата:
memset()
- пополнува низа со одреден бајтФункции за претворање на текстуални низи во броеви:
atof()
- претвора текстуална низа во децимален
бројatoi()
- претвора текстуална низа во цел бројФункции за испитување на текстуални низи:
strlen()
- ја враќа должината на дадена текстуална
низаstrcmp()
- споредува две текстуални низиstrncmp()
- споредува n бајти од две текстуални
низиstrchr()
- го наоѓа првото појавување на даден знак во
текстуална низаstrrchr()
- го наоѓа последното појавување на даден
знак во текстуална низаstrspn()
- во текстуална низа го наоѓа првото
појавување на знак кој не припаѓа на специфицирано множество од
знациstrcspn()
- во текстуална низа го наоѓа последното
појавување на знак кој не припаѓа на специфицирано множество од
знациstrpbrk()
- во текстуална низа го наоѓа првото
појавување на знак кој припаѓа на специфицирано множество од знациstrstr()
- во текстуална низа го наоѓа првото
појавување на дадена подниза<cctype>
Функции за работа со единечен знак:
isalnum()
- проверува дали даден знак е алфанумерички
(буква или цифра)isalpha()
- проверува дали даден знак е букваiscntrl()
- проверува дали даден знак е контролен
знакisdigit()
- проверува дали даден знак е декадна
цифраisxdigit()
- проверува дали даден знак е хексадекадна
цифраisprint()
- проверува дали даден знак може да се
печатиispunct()
- проверува дали даден знак е интерпункциски
знакisspace()
- проверува дали даден знак е празно
местоislower()
- проверува дали даден знак е мала букваisupper()
- проверува дали даден знак е голема
букваtolower()
- претвора дадена голема буква во соодветната
мала букваtoupper()
- претвора дадена мала буква во соодветната
голема букваisgraph()
- проверува дали даден знак има локална
графичка репрезентацијаДа се напише функција што ќе одредува колку пати даден знак се наоѓа во даден стринг. Знакот за споредување и стрингот се внесуваат од тастатура.
Пример
За стрингот
HELLO FINKI
знакот L
се појавува 2 пати.
#include <iostream>
using namespace std;
int count_char(char str[], char c) {
int vkupno = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] == c) vkupno++;
}
return vkupno;
}
int main() {
int MAX = 100;
char s[MAX], c;
.getline(s, MAX);
cin>> c;
cin << count_char(s, c);
cout return 0;
}
Да се напише функција што ќе ја одредува должината на една текстуална низа.
Да се даде итеративно и рекурзивно решение.
Пример
Ако на функцијата како аргумент и се предаде стрингот
zdravo!
тогаш таа треба да врати: 7
#include <iostream>
using namespace std;
int length(char s[]) {
int len = 0;
for (int i = 0; s[i] != '\0'; i++)
++;
lenreturn len;
}
int length_r(char *s) { // same as char s[]
if (*s == '\0') // same as if (s[0] == '\0')
return 0;
return 1 + length_r(s + 1);
}
int main() {
int MAX = 100;
char s[MAX];
.getline(s, MAX);
cin<< "Dolzhina: " << length(s) << " i " << length_r(s);
cout return 0;
}
Да се напише програма која ќе ја отпечати поднизата на дадена текстуална низа (што се внесува од тастатура) определена со позицијата и должината, што како параметри се внесуваат од тастатура. Поднизата започнува од знакот што се наоѓа на соодветната позиција во текстуалната низа, броејќи од лево.
Пример
Ако од тастатура се внесе:
banana
позиција: 2
должина: 4
тогаш програмата треба да отпечати: nana
#include <iostream>
#include <cstring>
using namespace std;
int main() {
int MAX = 100;
char s[MAX], dest[MAX];
int pozicija, dolzhina;
.getline(s, MAX);
cin>> pozicija >> dolzhina;
cin
if (pozicija <= strlen(s)) {
(dest, s + pozicija - 1, dolzhina);
strncpy[dolzhina] = '\0';
dest<< "Rezultat: " << dest << endl;
cout } else
<< "Nevaliden vnes, prochitaniot string ima samo %d znaci.\n" << strlen(s);
cout return 0;
}
Да се напише функција која ќе одредува дали една текстуална низа е подниза на друга текстуална низа.
Пример
face
е подниза на Please faceAbook
#include <iostream>
#include <cstring>
using namespace std;
int podstring(char *s1, char *s2) {
int d1 = strlen(s1);
int d2 = strlen(s2);
if (d1 > d2)
return 0;
for (int i = 0; i <= d2 - d1; i++)
if (strncmp(s1, s2 + i, d1) == 0)
return 1;
return 0;
}
int main() {
int MAX = 100;
char s1[MAX], s2[MAX];
.getline(s1, MAX);
cin.getline(s2, MAX);
cinif (podstring(s1, s2))
<< s1 << " e podstring na " << s2 << endl;
cout else
<< s1 << " NE e podstring na " << s2 << endl;
cout return 0;
}
Да се напише функција која ќе проверува дали дадена текстуална низа е палиндром.
Една текстуална низа е палиндром ако таа се чита исто од лево на десно и од десно на лево.
Примери за палиндроми
dovod
ana
kalabalak
#include <iostream>
#include <cstring>
using namespace std;
int e_palindrom(char str[]) {
int n = strlen(str);
for (int i = 0; i < n / 2; i++)
if (str[i] != str[n - 1 - i])
return 0;;
return 1;
}
// REKURZIVNO
int e_pal(char str[], int start, int end) {
if (start >= end) return 1;
if (str[start] == str[end])
return e_pal(str, start + 1, end - 1);
return 0;
}
int main() {
int MAX = 100;
char s[MAX];
.getline(s, MAX);
cin<< s << " ";
cout if (e_pal(s, 0, strlen(s) - 1))
("e palindrom.");
printfelse
("NE e palindrom.");
printfreturn 0;
}
Да се напише функција која ќе проверува дали дадена реченица е
палиндром. При проверката да се игнорираат празните места,
интерпункциските знаци, а соодветните мали и големи букви да се сметаат
за еднакви (A == a
, B == b
, итн.).
Примери за реченици - палиндроми
Jadejne i pienje daj!
A man, a plan, a canal, Panama.
Never odd or even.
Rise to vote sir!
Да се напише функција која за дадена текстуална низа ќе одредува дали таа е доволно сложена за да биде лозинка.
Секоја лозинка мора да содржи барем една буква, барем една цифра и барем еден специјален знак.
Пример
zdr@v0!
е валидна лозинка.
zdravo
не е валидна лозинка.
#include <iostream>
#include <cctype>
using namespace std;
int e_validna_lozinka(char str[]) {
int bukvi = 0, cifri = 0, spec = 0;
for (int i = 0; str[i] != '\0'; i++) {
if (isalpha(str[i]))
++;
bukvielse if (isdigit(str[i]))
++;
cifrielse
++;
spec}
return (bukvi > 0 && cifri > 0 && spec > 0);
}
int main() {
int MAX = 100;
char s[MAX];
.getline(s, MAX);
cin
<< s << " ";
cout if (e_validna_lozinka(s))
<< "e validna lozinka.";
cout else
<< "NE e validna lozinka.";
cout return 0;
}
Да се напише функција која во стринг што и се предава како влезен параметар ќе ги промени малите букви во големи и обратно, и ќе ги отстрани сите цифри и специјални знаци.
Пример
За низата:
0v@ePr1m3R
треба да се добие:
VEpRMr
#include <iostream>
#include <cctype>
using namespace std;
void filter(char str[]) {
int i = 0, j = 0;
while (str[i] != '\0') {
if (isalpha(str[i])) {
if (islower(str[i]))
[j] = toupper(str[i]);
strelse if (isupper(str[i]))
[j] = tolower(str[i]);
str++;
j}
++;
i}
[j] = '\0';
str}
int main() {
int MAX = 100;
char s[MAX];
.getline(s, MAX);
cin
(s);
filter<< s << endl;
cout return 0;
}
Да се напише функција која во дадена текстуална низа ќе ги отстранува празните места на почетокот и крајот од низата.
Пример
За низата:
" make trim "
треба да се добие:
"make trim"
#include <iostream>
#include <cctype>
using namespace std;
void trim(char s[]) {
int spaces = 0;
while (isspace(s[spaces])) {
++;
spaces}
int i;
for (i = 0; s[i + spaces] != '\0'; i++) {
[i] = s[i + spaces];
s}
[i] = '\0';
swhile (i > 0 && isspace(s[i - 1])) {
--;
i[i] = '\0';
s}
}
int main() {
int MAX = 100;
char s[MAX];
.getline(s, MAX);
cin<< "[" << s << "] -> ";
cout (s);
trim<< "[" << s << "]";
cout return 0;
}