for
(
int
i = 0; i <
strlen
(s); i++){
cout<}
2)
for
(
int
i = 0; s[i] !=
'\0'
; i++){
cout<}
s[i] !=
'\0'
bilan
s[i] !=
NULL
bir
xil
.
Alohida belgilar ko‟rinishida ham berish mumkin:
char
s[10] = {
'a'
,
'b'
,
'c'
,
'd'
};
char tipli massiv bilan ishlash funksiyalari.
char tipli massiv satr deb ham nomlanadi.
Funksiya
Tavsifi
strlen
(
satr_nomi
)
char massiv uzunligini aniqlaydi . Bunda NULL simvol hisobga olmaydi.
Nusxa olish
strcpy
(
s1,s2
)
s2 char massiv simvollarini s1 ga ko’chiradi.
char
s1[] =
"abcd123456"
;
char
s2[] =
"efghij"
;
strcpy
(s1,s2);
chiqadi.
cout<efghij
strncpy
(
s1,s2, n
)
s2 massivning dastlabki n ta simvolini s1 massivning dastlabki dastlabki n ta
indeksiga joylashtiradi.
char
s1[] =
"abcdefghijklmn"
;
char
s2[] =
"123456"
;
strncpy
(s1, s2, 4);
cout<endl
;
strncpy
(s1, s2, 40);
cout<endl
;
Natija
:
1234efghijklmn
123456
Ulash
strcat(
s1,s2
)
s2 massivni s1 massivning davomiga birlashtiradi.
char
s1[] =
"ab"
;
char
s2[] =
"ba"
;
strcat
(s1, s2);
cout<endl
;
Natija:
abba
strncat(
s1,s2,n
)
s2 ning dastlabki n ta harfini satrni s1 massivning davomiga birlashtiradi.
Satrlarni taqqoslash
strcmp(
s1,s2
)
s1 char massiv bilan s2 char massivni leksikografik jihatdan taqqoslaydi va int tipidagi
son qaytaradi. Agar s1=s2 teng bo’lsa
-
0, s1>s2 bo’lsa
- 1, s1 bo’lsa
- -1
qaytaradi. Harflarning kata kichikligi hisobga olinadi.
strncmp(
s1,s2,n
)
s1 va s2 satrlarning dastlabki n ta simvollarini taqqoslaydi va agar satrlar teng bo’ls
a 0,
s1>s2
bo’lsa
- 1
, s1 - -1 qiymat qaytaradi. Harflarning katta kichikligi hisobga
olinadi.
stricmp(
s1,s2
)
s1 char massiv bilan s2 char massivni leksikografik jihatdan taqqoslaydi va int tipidagi
son qaytaradi. Agar s1=s2 teng bo’lsa
-
0, s1>s2 bo’lsa
-
1, s1 - -1
qaytaradi. Harflarning kata kichikligi hisobga olinmaydi.
char
s1[100] =
"abA"
;
char
s2[100] =
"ABa"
;
cout<<
stricmp
(s1, s2);
Natija: 0
strnicmp(
s1,s2,n
)
s1 va s2 satrlarning dastlabki n ta simvollarini taqqoslaydi va agar satrlar teng bo’lsa 0,
s1>s1 bo’lsa >0, s1 Harflarning kata kichikligi hisobga
olinmaydi.
Simvollar bilan ishlash
isalnum(
c
)
agar c harf yoki raqam bo’lsa
true
, boshqa holatlardan
false
qaytaradi.
isalpha(
c
)
agar c harf bo’lsa
true
, boshqa holatlardan
false
qaytaradi.
isdigit(
c
)
agar c raqam bo’lsa
true
, boshqa holatlardan
false
qaytaradi.
islower(
c
)
agar c kichik ingliz harf bo’lsa
true
, boshqa holatlardan
false
qaytaradi.
isupper(
c
)
agar c katta ingliz harf bo’lsa
true
, boshqa holatlardan
false
qaytaradi.
isspace(
c
)
agar c probel bo’lsa
true
, boshqa holatlardan
false
qaytaradi.
toupper(
c
)
agar c simvoli kichik ingliz harfi bo’lsa u holda unga mos katta harfni qaytaradi.
Aks
holda o’zgartirilishsiz qoldiriladi.
O’zgartirish funksiyalari
O’zgartirish funksiyalaridan foydalanish uchun
#include
kerak bo‟ladi.
atof(
s
)
s1
satrni
double tipidagi songa o’zgartiradi.
char
s[100] =
"123.45"
;
double
a
=
atof
(s); cout< atoi(
s
)
s1
satrni
int tipidagi songa o’zgartiradi.
atoll(
s
)
s1
satrni
long long tipidagi songa o’zgartiradi.
Funksiya
Tavsifi
itoa(a,
s, k
)
a int sonini s char massivga k asosli sanoq sistemasida
o’tkazadi. To’g’ridan
-
to’g’ri o’zini o’tkazish uchun sanoq
sistemasi asosiga 10 yozish lozim.
char
s[100];
int
a = 456;
itoa
(a,
s, 10); cout< lltoa(a,
s, k
)
a long long tipidagi sonni sonini s char massivga k asosli sanoq
sistemasida o’tkazadi.
Standart kutibxonaning kiritish/chiqarish funksiyalari
getchar(
с
)
Bitta belgili o’zgaruvchini(char) o’qib uning qiymatini qaytaradi. putchar(с) c char
o’zgaruvchining qiymatini chiqarish.
char
с
= getchar(); putchar(
с
);
gets(
s
)
s
char
massivga toki ENTER bosilmagunga qadar bir qatorni o’qib oladi. puts(s) satrni
chiqarish funksiyasi.
char
s[100];
gets
(s);
puts
(s);
Masala.
Berilgan satrdagi katta ingliz alvafiti harflari sonini, katta harflar sonini, kichik
harflar sonini, raqamlar sonini, ma‟lum tinish belgilar sonini(
. , ! ? : ;
) aniqlaydigan
dastur tuzing. Satr bir qatordan beriladi uzunligi 1000 simvoldan oshmaydi.
#include
#include
#include
using
namespace
std;
int
main
() {
char
s[1000];
gets
(s);
int
cnt_lowers = 0;
int
cnt_uppers = 0;
int
cnt_letters = 0;
int
cnt_digits = 0;
int
cnt_punkt_marks = 0;
for
(
int
i = 0; i <
strlen
(s); i++)
{
if
(s[i] >=
'a'
&& s[i] <=
'z'
) cnt_lowers++;
if
(s[i] >=
'A'
&& s[i] <=
'Z'
) cnt_uppers++;
if
(s[i] >=
'0'
&& s[i] <=
'9'
) cnt_digits++;
if
(s[i]==
'.'
|| s[i]==
','
|| s[i]==
'!'
|| s[i]==
'?'
|| s[i]==
':'
|| s[i]==
';'
) cnt_punkt_marks++;
if
((s[i] >=
'a'
&& s[i] <=
'z'
) || (s[i] >=
'A'
&& s[i] <=
'Z'
)) cnt_letters++; }
cout<<
"Kichik harflar soni: "
<endl
;
cout<<
"Katta harflar soni: "
<endl
;
cout<<
"Harflar harflar soni: "
<endl
;
cout<<
"Raqamlar harflar soni: "
<endl
;
cout<<
"Tinish belgilari soni: "
<endl
;
}
C++ ning simvollar bilan ishlaydigan funksiyalari orqali
ham tekshirishimiz mumkin.
Masalani yechishning boshqa usuli:
#include
#include
#include
using
namespace
std;
int
main
() {
char
s[1000];
gets
(s);
int
cnt_lowers = 0;
int
cnt_uppers = 0;
int
cnt_letters = 0;
int
cnt_digits = 0;
int
cnt_punkt_marks = 0;
for
(
int
i = 0; i <
strlen
(s); i++) {
if
(
islower
(s[i]))
if
(s[i] >=
'A'
&& s[i] <=
'Z'
)
cnt_uppers++;
if
(
isdigit
(s[i])) cnt_digits++;
if
(
ispunct
(s[i])) cnt_punkt_marks++;
if
(
isalpha
(s[i])) cnt_letters++;
}
cout<<
"Kichik harflar soni: "
< endl
;
cout<<
"Katta harflar soni: "
< endl
;
cout<<
"Harflar harflar soni: "
< endl
;
cout<<
"Raqamlar harflar soni: "
< endl
;
cout<<
"Tinish belgilari soni: "
< endl
;
}
Mavzu: C++ da string
Ishdan maqsad.
C++ da satrlar bilan ishlash uchun kiritilgan
string
sinfi bilan
tanishish, uning metodlarini misollarda qo‟llash.
C++ dasturlash tilining C dasturlash tilidan farqlaridan biri C++ da satrlar bilan
ishlash uchun
string
sinfi mavjud
. string
tipli o‟zgaruvchi o‟zida oldingi
laboratoriya ishida ko‟rib chiqilgan
simvollar ketma-ketligini saqlash va amallar
bajarish uchun foydalaniladi. string C++ ning standart kutbxonasi tarkibiga
kiradi, shuning uchun u bilan ishlash uchun
using
namespace
std ni yozish
lozim.
#include
using
namespace
std;
int
main
() {
string
s;
cin>>s;
cout<}
Bu dasturda klaviatura orqali kiritilgan simvollar ketma-ketligini (satr) o‟qiydi
va chiqarib beradi. cin>>s birinchi probelgacha bo‟lgan satrni o‟qiydi. Bir
qatorni to‟liq kiritish uchun
getline
dan foydalanamiz:
string
s;
getline
(cin, s);
cout<Satr uzunligi deb satrdagi simvollar soni ga aytiladi. Satr uzunlgini topish uchun
satr o‟zgaruvchisidan keyin nuqta yozilib length() moydoniga mujorat qilanadi:
cout<Satr simvollari
0 dan s.length()-1
gacha
indekslanadi.
string tipli satrning simvollariga murojat qilish char tipli massiv dagi kabi bo‟ladi.
Misol.
Bitta qatorda katta harflardan va probellalrdan iborat matn berilgan. Undagi
A
harfini
B
ga,
B
harfini esa
A
ga o‟zgartiruvchi dastur tuzing.
№
Kiruvchi ma’lumot
Chiquvchi ma’lumot
1
AB
BA
2
CBADE BREDA
CABDE AREDB
Yechimi:
#include
using
namespace
std;
int
main
() {
string
s;
getline
(cin, s);
for
(
int
i = 0; i < s.length(); i++) {
if
(s[i]==
'A'
)
s[i] =
'B'
;
else
if
(s[i]==
'B'
)
s[i] =
'A'
;
}
cout<}
substr(
begin_index, length
) funksiyasi.
Satrining qism satri deb uning ichidan uzluksiz ketma-ket olingan qismiga
aytiladi.
abcdefghijklmn
satridan
cdefg
qism satrini olish uchun uning
2-indeksdan boshlab 5 ta simvol olishimiz kerak. substr(begin_index, length)
funksiyasi ikkita parametrga ega, boshlang‟ich indeks va bu indekdan boshlab
qanda belgini olish kerakligi.
string
s =
"abcdefghijklmn"
;
string
sub_s = s.substr(3, 5);
cout<Natija: cdefg
chiqadi.
substr(
begin_index
) funksiyasi.
Bu funksiya faqat bitta parametrga ega bo‟lib
begin_index
indeksdan boshlab
oxirigacha bo‟lgan qism satrni qaytarib beradi.
string
s =
"abcdefghijklmn"
;
string
sub_s = s.substr(2);
cout<Natija:
cdefghijklmn
Matndagi so’zlarniga ajratish.
Misol.
Matndagi so‟zlardan massiv hosil qiling va bosh harf bilan boshlangan
so‟zlarni alohida qatorlarda chiqaring. Matn bitta qatorda berilgan. So‟zlar
probel bilan ajratilgan. Simvollar soni 1000 dan oshmaydi.
№
Kiruvchi ma’lumot
Chiquvchi ma’lumot
1
Adsk asd SsjdDsd dDsd
Adsk
SsjdDsd
Echimi.
Birinchi usul.
Qatorni o‟qib olgach uni probellar bilan ajratib chiqamiz.
#include
using
namespace
std;
int
main
() {
string
s;
getline
(cin, s);
// qatorni kiritamiz
s +=
" "
;
//
ohiriga bitta probel qo'shamiz
string
words[1000];
// so'zlarni saqlash uchun massiv
int
cnt_w = 0;
//
so'zlarning soni o'zgaruvchisi, dastlabki qiymari nol
int
begin_index = 0;
// navbatdagi so'zning
boshlang'ich indeksini saqlaydigan o'zgaruvchi, birinchi
so'z nolinchi indeksdan boshlanadi
for
(
int
i = 0; i < s.length(); i++) {
if
(s[i]==
' '
) {
// probel so'z yakunini topamiz
words[cnt_w++] = s.substr(begin_index, i-
begin_index);
//navbatdagi so'z begin_index da boshlanib i-
1 da tugallanadi. begin_index dan boshlanadigan i-
begin_index ta harfni qirqib olamiz
begin_index = i+1;
}
}
for
(
int
i = 0; i < cnt_w; i++) {
if
(words[i][0] >=
'A'
&& words[i][0] <=
'Z'
)
//bosh
harf bilan boshlanganligini tekshiramiz
cout<"\n"
;
}
}
Ikkinchi usul.
cin>>s
orqali
navbatdagi so‟zni o‟qib olamiz va uni
massivga joylashtiramiz.
while
sikli ichiga yozsak kiritishni to‟xtatmagunga
qadar o‟qib oladi.
Crtl+Z
orqali to‟xtatiladi.
#include
using
namespace
std;
int
main
() {
string
words[1000];
string
s;
int
cnt_w = 0;
while
(cin>>s) {
words[cnt_w++] = s;
}
for
(
int
i = 0; i < cnt_w; i++) {
if
(
isupper
(words[i][0]))
cout< endl
;
}
}
string tipli o’zgaruvchi ustiga bajariladigan boshqa
funksiyalar.
Funksiya
Tavsifi
s.find(t)
s satrdan t satrni qidiradi va agar t satr topilsa
uning boshlanish indeksini qaytaradi. Agar
topilmasa
-1
qaytaradi.
string
s =
"erfabceabc"
;
string
t =
"abc"
;
int
ind = s.find(t);
cout< Natiija: 3
s.insert(
from
, t)
s
satrga
from
indeksiga t satrni qo‟shadi.
string
s =
"abcde"
;
string
t =
"fgh"
;
int
from = 2;
s.insert(from, t);
cout< Natijada s satr qiymati
ab
fgh
cde
ga teng bo’ladi
s.append(t)
s
satr davomiga
t
satrni qo‟shadi.
string
s =
"abcde"
;
string
t =
"fgh"
;
s.append(t);
cout< Natijada s satr qiymati
abcde
fgh
ga teng bo’ladi
Oxiriga satr qo‟shishni
s += t
shaklida yozish
ham mumkin.
s.erase(from,
cnt
);
s satrdan form indeksidan boshlab
cnt ta belgini o’chirib tashlaydi.
string
s =
"abcdefghij"
;
int
from = 2;
int
cnt = 3;
s.erase(from, cnt);
cout< Natijada s satr qiymati
abfghij
ga teng bo’ladi
s.copy(a,
cnt
, from);
s
satrdan
from
indexdan boshlab
cnt
ta
simvolni
a
char massivga nusxa olish
.
Oxirgi indeksni
null
qiymatga aulantirish
lozim.
string
s =
"abcdefghijklm"
;
char
a[100];
int
cnt = 5, from = 3;
s.copy(a, cnt, from);
a[cnt] =
'\0'
;
cout< simvolli massiv
defgh
qiymatini qabul qiladi.
s
satrni to‟liq
a char
massiviga o‟tirish
uchun
s.copy(a, s.length(), 0);
a[s.length()] =
'\0'
;
Yoki sikl yordamida amalga oshirishimiz mumkin:
for
(
int
i = 0; i < s.length(); i++) {
a[i] = s[i];
}
a[s.length()] =
'\0'
;
s.c_str();
s
satrni char massivga o‟zgaruvchida saqlamasdan
o‟tish.
Bu funksiydan string ko‟rinishida berilgan satr sonni
butunga o‟tishda foyldalanishimiz mumkin.
string
s =
"42351"
;
int
a =
atoi
(s.c_str());
cout< 0>
Do'stlaringiz bilan baham: |