C ++ саптары



аркан

C ++ программасында саптарды түзүүнүн жана колдонуунун үч негизги ыкмасы келтирилген:

  1. Char элементтеринин массивин колдонуу
  2. колдонуу менен string тап
  3. колдонуу менен wchar_t кенен каармандар үчүн

Чечмелер массиви

String - символдордун ырааттуулугу. char маалыматтардын түрү C ++ тилинде бир символду көрсөтүү үчүн колдонулат. Эгер сиз программаңызда сапты колдонууну кааласаңыз, анда бир катар белгилерди колдонсоңуз болот. Сызгалар массивин колдонуп, тилкенин декларациясы жана аныктамасы, башка ар кандай типтеги массивдин декларациясы жана аныктамасына окшош:

//define an array of chars with 10 elements
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

Бардык сап '\ 0' аяктаган нөл белгиси менен аяктайт. Массивдин аныктамасы акыркы элемент катары нөл \ '0 белгисин камтышы керек. Жогоруда массивдин сыйымдуулугу 10 болсо, анын 8ин гана колдондук. Массивдин калган эки белгилери аныкталбайт.

Төмөндө көрсөтүлгөндөй динамикалык узундуктагы белгилердин массивин жарыялоонун жана аныктоонун дагы бир жолу:

char msg2[] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };

Жогоруда, бөлүнгөн эстутумдун көлөмү символдордун ырааттуулугун сактоо үчүн керек болгондой эле болот.

Төмөндө көрсөтүлгөндөй, эки тырмакчада сап тамгаларын колдонуу символдордун массивин инициализациялоонун эң жөнөкөй жолу:

char msg3[] = "Message";

Функцияларынын жардамы менен char массивдеринде кээ бир негизги амалдарды аткарууга болот cstring сыяктуу китепкана:

Бир сапты экинчи сапка көчүрүү

strcpy_s(destination, source)

Төмөндө колдонуу демосу келтирилген strcpy_s
char msg[10] = { 'M', 'E', 'S', 'S', 'A', 'G', 'E', '\0' };
char dest[20];
strcpy_s(dest, msg);
cout << "String copied from msg = " << dest << endl;

Жогорудагы мисалдын натыйжасы төмөндө көрсөтүлгөн

Сап msg = MESSAGE дан көчүрүлдү

Бир кылды экинчисине бириктир

strcat_s(string1, string2)

string2 саптын аягына тиркелет
//declare 2 messages
char string1[20] = "Good";
char string2[] = " Morning";
//concatenate strings
strcat_s(string1, string2);
cout << string1 << endl;

Жогорудагы программанын чыгышы төмөнкүдөй болот:

Кутмандуу таң

Эскертүү: Аны string1 менен айкалыштыруу үчүн string2де бош орун жетиштүү болушу керек.

Жиптин узундугун алыңыз

strlen(string)

cout << "Length of the string 2 is " << strlen(string2) << endl;

Жогорудагы коддун чыгышы болот

2-саптын узундугу - 8

String: "Таң" 7 белгиден жана 8ден сакталатth символ нөл белгиден турат - '\ 0'

Эки сапты салыштыр

strcmp(string1, string2)

Бул функция кайтып келет 0, эгер саптар тең болсо; терс string1 болсо, мааниси азыраак string2 жана оң string1 болсо мааниси көбүрөөк string2 караганда.
//declare two strings
char str1[100];
char str2[100];
//get user input of strings:
cout << "Please enter the first string\n";
cin >> str1;
cout << "Please enter the second string\n";
cin >> str2;
//compare strings
int result = strcmp(str1, str2);
if (result == 0)
{
	//strings are equals
	cout << str1 << " is equal to " << str2 << endl;
}
else
{
	if (result > 0)//str1 is greater
		cout << str1 << " is greater than " << str2 << endl;
	else//str2 is greater
		cout << str1 << " is less than " << str2 << endl;
}

Төмөндө жогоруда көрсөтүлгөн программанын жыйынтыгы келтирилген


Биринчи сапты киргизиңиз
ABC
Экинчи сапты киргизиңиз
Абд
abc абддан аз

strcmp саптарды лексикографиялык (алфавиттик) тартипте салыштырат. Саптар үчүн "азыраак" деген сөз "мышык" "иттен" аз экендигин билдирет, анткени "мышык" "иттен" мурун алфавит боюнча келет.

String Class

Стандарттык C ++ китепканасы тарабынан берилген классты колдонуп, саптарды чагылдыруунун дагы бир жолу. Бул класс аталган string жана ал C ++ тилиндеги char массивдерине караганда алда канча көп функционалдуулукка ээ. Сиздин программаларыңызда "string" классын колдонуу сизге көбүрөөк мүмкүнчүлүктөрдү берет. Программаңызда саптарды колдонуу үчүн төмөнкүлөрдү камтышы керек:

#include <string>

Бул баш файлды кошкондон кийин, сиз сап объекттерин программаңызда колдоно аласыз. Бул жерде сапты жарыялоонун жана аныктоонун мисалы келтирилген:
string s1 = "Have a";
string s2 = " nice day";

Менен иштөө аркан класс абдан жеңил.

Саптарды бириктирүү

Саптарды бириктирүү үчүн кошуу белгисин колдонуңуз:

string s3 = s1 + s2;
cout << s3 << endl;

Төмөндө жогорудагы коддун чыгышы келтирилген

Күнүңүз куттуу болсун

Саптын узундугу

Жиптин узундугун алуу үчүн, мисалы, "s3", төмөнкү функцияны колдонсо болот

s3.length()

Саптын узундугун алуу мисалы
cout << "Length of s3 is " << s3.length() << endl;

Төмөндө жогорудагы коддун чыгышы келтирилген

S3 узундугу 15

Бир сапты экинчи сапка көчүрүү

Бир сапты экинчи сапка көчүрүү үчүн, дайындоо операторун колдонуңуз

string s4 = s2;
cout << s4 << endl;

Төмөндө коддун жогорудагы OS чыгарылган

жакшы күн

Сапты туруктуу символ массивине айландыруу

Кээде сап объектисин туруктуу char массивине айландыруу пайдалуу. Муну колдонуу менен жасай аласыз c_str() төмөндө көрсөтүлгөндөй иштейт

const char* cstr = s3.c_str();

String бош же бош эместигин текшериңиз

Сиз колдоно аласыз empty() саптын бош же бош эместигин аныктоочу функция. Эгер сап бош болсо, иштей бериңиз empty () кайра келет true башкача false

Төмөндө кантип колдонуу керектиги көрсөтүлгөн код келтирилген empty()

if (s4.empty())
	cout << "s4 is empty" << endl;
else
	cout << s4 << endl;

String классы программистке кылдарды иштетүү үчүн бир топ мүмкүнчүлүктөрдү берет, бирок биз азыр негизги нерселерди гана талкуулайбыз. Кийинки темаларда кыл сабагы жөнүндө кененирээк маалымат беребиз.

Кеңири characher wchar_t

Кең мүнөз wchar_t жөнөкөй белгилердин типтеринен чоңураак болгон маалыматтардын түрү. Бул маалымат түрү "2 же 4" байтты ээлейт. Бул түр саптарды чагылдыруу үчүн кеңейтилген белгилер топтомун колдонууга мүмкүнчүлүк берет. Көбүнчө wchar_t маалымат түрү кытай, жапон сыяктуу эл аралык тилдер колдонулганда колдонулат. C ++ билдирүү үчүн курулган маалымат түрүн камсыз кылат wchar_t кенен каармандар.

Кең символдук өзгөрүлмө жөнүндө жарыялоо төмөнкүдөй жол менен жүргүзүлөт:

wchar_t wideString;

Массивдин кең массивин колдонуу үчүн wchar_t массивин төмөндө көрсөтүлгөндөй жарыялашыңыз керек:
wchar_t wideString[100];

Менен иштөө wchar_t түрүн камтышы керек wchar Төмөндө көрсөтүлгөндөй, программаңыздагы китепкана:
#include <wchar.h>

Wchar китепканасы кеңири белгилер менен иштөө үчүн ар кандай функцияларды жана туруктууларды сунуш кылат. Ичинде бир нече туруктуу бар wchar китепкана бөлүмүн ачуу:
  • NULL - нөл көрсөткүчүнүн туруктуусун билдирет.
  • WCHAR_MAX - whcar_t максималдуу маанисин билдирет
  • WCHAR_MIN - wchar_t минималдуу маанисин билдирет.
  • WEOF - Файлдын аягын көрсөтүү үчүн колдонулган туруктуу.

Кеңири белгилер сабына маани берүү үчүн сиз колдонушуңуз керек swprintfмилдети:

int swprintf (wchar_t*  destinationString, size_t length, const wchar_t* formatString, ...);

Бул жерде параметрлер:
  • Destination String - форматталган маалыматтарды камтыган кенен белгилер. Бул wchar_t массиви же бир кеңири символ болушу мүмкүн.
  • Узундук - Белгилердин саны жазылган. Жиптин аягындагы нөл белгиси үчүн кылдын узундугун бир-бирден көбөйтүүнү унутпаңыз.
  • Формат сабы - Берилген форматка ылайык маалыматтарды жазуу үчүн колдонулган сап.
  • … - Формат сабы менен колдонула турган параметрлер.

Ийгиликке жеткенде, бул функциянын кайтарым мааниси - жазылган символдордун саны.

Төмөндө бир мисал келтирилген

swprintf(wideString, 6, L"HELLO");

Жогоруда, формат сабы жөнөкөй тилке жана "HELLO" дан мурун "L" белгиси колдонулуп, сапты а const wchar_t*

Кийинки мисалда формат саптарын формат спецификаторлору менен кантип колдонууга болот:

swprintf(myMessage, 13, L"My age is %d ", 20);

Жогоруда myMessage өзгөрүлмө "камтыйт"Менин жашым 20да«.

Айрым формат көрсөтүүчү тизмеси төмөнкү таблицада келтирилген:

 Specifierтүрү
 д, менОндук же бүтүн сан. Аргумент бүтүн мааниге ээ
 UБелгисиз бүтүн сан
 OСегиздик бүтүн сан
 x, XОн алтылык бүтүн сан
 FЖылма чекиттин мааниси
 EИлимий сүзүүчү чекит
 cбелги
 sаркан
 nInt чейин көрсөткүч

Кең белгилерди басып чыгаруу үчүн биз колдонушубуз керек wpritnf милдети:

int wprintf (const wchar_t* formatString, ...);

wprintf белгиленген форматтагы стандарттык чыгууга кең белгилерди жазат. Мисалы, жогорудагы коддо колдонулган эки кенен символ саптарынын маанисин төмөндөгүдөй кылып басып чыгара алабыз
wprintf(wideString);
wprintf(myMessage);

Сиз кеңири белгилерди стандарттык чыгарууга жазуу үчүн колдоно аласыз wcout сиз колдонгон ыкма менен каршы чыгыңыз cout маалыматтарды чыгаруу.
wcout << "Use of wcout " << wideString << endl;

Консольдан кеңири белгилерди окуу үчүн, колдонуу керек wcin ордуна cin
wchar_t name[50];
cout << "Enter your name" << endl;
wcin >> name;
cout << endl << "Your name is ";
wprintf(L"%s", name);