- Какво е символен низ?
- Видове символни низове
- Упражнение
- Какво следва?
Какво е символен низ?
Символният низ представлява крайна редица от еднотипни елементи от тип char или по-кратко казано масив от символи. Разликата с масивите е, че символните низове имат един специфичен символ, който се слага накрая на символният низ наричан още нулев терминатор. (null-terminator) Този нулев терминатор определя краят на символният низ.
Как и къде се използват символните низове?
Представете си, че искате на екрана да напишете Enter your number. Това се пише чрез cout << "Enter your number" << endl; и е символен низ. Този така наречен нулев терминатор ние не го виждаме като изход било то в конзола или визуален статичен текст, но той съществува и изглежда по този начин:
cout << "Enter your number\0" << endl;
Правилно, той е тази нуличка, която върви заедно с наклонената черта. Това не ви е много важно, просто го казваме да го знаете. Може да ви се наложи, ако работите на по-ниско ниво.
Видове символни низове
Има два вида символни низове и те са още старите, които най-вероятно всички ги знаят и те са едни гадни и отвратителни символни низове, наречени C-style символни низове и вторият вид са новите, които не са по-малко гадни, но са по-удобни и лесни за използване поне - библиотеката string на C++.
Ще разгледаме и двата вида подробно и ще кажем разлики и кое е за предпочитане за използване.
- C-style символни низове - Те представляват точно масиви от символен тип. Ето един пример как можем да декларираме един символен низ:
След като се изпълни кода, на екрана трябва да ви се покаже думата Hello. Към този вид символни низове ще добавим и няколко функции, които можете да използвате. Библиотеката се казва cstring и в нея се съдържат няколко функции:
Код за потвърждение: Избери целия код
char hello[6] = { 'H', 'e', 'l', 'l', 'o', '\0' }; // Или char* hello = "Hello"; cout << hello << endl;
- strcpy - Приема два параметъра, които са символни низове.
Синтаксис:
Действие:Код за потвърждение: Избери целия код
strcpy(<символен низ 1>, <символен низ 2>);
Копира <символен низ 2> в <символен низ 1>. - strcat - Приема два параметъра, които са символни низове.
Синтаксис:
Действие:Код за потвърждение: Избери целия код
strcat(<символен низ 1>, <символен низ 2>);
Добавя <символен низ 2> в края на <символен низ 1>. - strlen - Приема един параметър.
Синтаксис:
Действие:Код за потвърждение: Избери целия код
strlen(<символен низ 1>);
Връща дължината на <символен низ 1>. - strcmp - Приема два параметъра, които са символни низове.
Синтаксис:
Действие:Код за потвърждение: Избери целия код
strcmp(<символен низ 1>, <символен низ 2>);
Връща нула, ако <символен низ 2> и <символен низ 1> са равни, връща -1, ако <символен низ 1> е с по-малък от <символен низ 2> и връща 1 ако <символен низ 1> е по-голям от <символен низ 2>. - strchr - Приема два параметъра - един символен низ и един символ.
Синтаксис:
Действие:Код за потвърждение: Избери целия код
strchr(<символен низ>, <символ>);
Връща позицията на първият срещнат символ в <символен низ>, който е същият като <символ>. - strstr - Приема два параметъра.
Синтаксис:
Действие:Код за потвърждение: Избери целия код
strlen(<символен низ 1>, <символен низ 2>);
Връща позицията на първата срещната част в <символен низ 1>, която е същата като <символен низ 2>.
По този начин можете да използвате тези функции.Код за потвърждение: Избери целия код
#include <iostream> #include <cstring> // Библиотеката ни трябва, за да използваме гореспоменатите функции using namespace std; int main () { char str1[10] = "AMXX"; // Символен низ 1 char str2[10] = "BG"; // Символен низ 2 char str3[10]; // Символен низ 3 int len; // Размер // Копираме str1 в str3 strcpy( str3, str1); cout << "strcpy( str3, str1) : " << str3 << endl; // Добавя str2 към str1 strcat( str1, str2); cout << "strcat( str1, str2): " << str1 << endl; // Взема размера на str1 след добавянето len = strlen(str1); cout << "strlen(str1) : " << len << endl; return 0; }
- strcpy - Приема два параметъра, които са символни низове.
- String библиотеката в C++ - Там нещата се случват доста по-лесно и я препоръчвам на всеки, който се мъчи с тези стари C-style символни низове. Няма смисъл от тях, освен ако не работите на ниско ниво. Ще обясня и защо. Разликата между C и C++ символните низове е, че едното работи на класове и прави използването му по-лесно, но затруднява обработката на информация като битове и байтове. Това е C++ String библиотеката. Докато C-style символните низове могат да се четат байт по байт и бит по бит доста по-лесно, което прави управлението на даден устройства, които срещаме всеки ден в пъти по-лесно, отколкото да се чудим какво става точно отдолу и да минаваме през десетки неща както прави C++ String библиотеката.
Тя е по-полезна, когато правим неща като софтуерни програми, които са по-скоро нещо подобно на skype, notepad и други такива. Нека видим как можем да направим същата програма като тази на C-style символните низове, само че като използваме C++ String библиотеката:
Доста по-лесно е нали? Даже има познати неща! Виждате ли разликата? Реално, използвайте което ви е по-удобно. От лична гледна точка препоръчвам string библиотеката, защото има доста повече функционалност.Код за потвърждение: Избери целия код
#include <iostream> #include <string> using namespace std; int main () { string str1 = "AMXX"; // Символен низ 1 string str2 = "BG"; // Символен низ 2 string str3; // Символен низ 3 int len; // Размер // Копира str1 в str3 str3 = str1; cout << "str3 : " << str3 << endl; // Добавя str2 към края на str1 str3 = str1 + str2; cout << "str1 + str2 : " << str3 << endl; // Взема общият размер на str3 len = str3.size(); cout << "str3.size() : " << len << endl; return 0; }
Упражнение
Да се създаде програма, която да създава символни низове от двата типа и да ги извежда на екрана. След това да проверява дали са еднакви и ако са, да изписва на екрана, че са.
Пример:
Имаме един символен низ от c-style, който е char str1[6] = { 'H', 'e', 'l', 'l', 'o', '\0' }; и един от string библиотеката string str2 = "Hello"; и още два за всеки тип, за да ги използвате в сравнението.
Какво следва?
В следващият пост ще преминем към функции.