C++ Функция за низове: strcpy(), strcat(), strlen(), strcmp()

⚡ Умно обобщение

C++ Функции за низове като strcpy, strcat, strlen и strcmp позволяват на програмите да копират, съединяват, измерват и сравняват текст. Този ресурс обяснява какво е низ, как да се декларират низове в C-стил и std::string, как да се осъществява достъп до техните стойности и да се прилагат основни функции за низове с примери.

  • 🔤 Основна дефиниция: Низът е поредица от символи; C++ string е обект на класа std::string.
  • 🧱 Две декларации: C++ поддържа C-стил масиви от символи, завършващи с '\0' и по-безопасния тип клас std::string.
  • 📥 Достъп до стойности: Низовете се четат и отпечатват по име, демонстрирано както с масиви от тип char, така и със std::string.
  • 🛠️ Функции за низове: strcpy копира, strcat конкатенира, strlen измерва дължината, а strcmp сравнява два низа.
  • 📦 Задължителен заглавен файл: Функциите за C низове се намират в заглавния файл cstring, който трябва да бъде включен преди употреба.

C++ Струнни функции

Какво е низ?

Низът е поредица от знаци. А C++ string е обект на класа std::string. Символите се съхраняват като поредици от байтове, като е разрешен достъп до единичен байт символ.

C++ Низовете разпределят памет динамично. Повече памет може да бъде разпределена на низа по време на изпълнение, ако е необходимо. Тъй като няма предварително разпределение на паметта, няма загуба на памет. Можем да извършваме различни операции с низове, включително сравнение, конкатенация, преобразуване и др.

Деклариране на низове

C++ поддържа два типа декларации на низове:

  • Символен низ в стил C
  • Тип клас низ

Символен низ в стил C

Този тип декларация на низове беше въведен в C език за програмиране. C++ продължава да го поддържа. Това е просто едномерен масив от символи, завършващ с нулев символ (\0). Низ, завършващ с нула, съдържа символите, които съставят низа, последвани от нула.

Разгледайте декларацията на низ, дадена по-долу:

char name[5] = {'J', 'o', 'h', 'n', '\0'};

Горната декларация създава низ, който образува думата John. Думата има 4 символа, но низът е с дължина 5. Допълнителното пространство позволява съхраняването на нулевия символ.

Използвайки правилото за инициализация на масива, можем да напишем горния израз, както следва:

char name[] = "John";

Обърнете внимание, че не е необходимо да поставяте нулевия символ в края на низовата константа. C++ компилаторът автоматично ще постави '\0' в края на низа при инициализиране на масива.

std::string

Стандарт C++ Библиотеката предоставя класа string, който поддържа различни операции с низове. Той е написан като std::string.

За да използваме този клас, първо трябва да го включим в работното си пространство, използвайки препроцесора #include, както е показано по-долу:

#include <string>

След това можем да декларираме нашия низ, използвайки ключовата дума string. Например:

string name = "John";

Горният израз ще създаде низ с име name, който да съдържа стойността John.

Достъп до низови стойности

In C++, можем да получим достъп до стойностите на низа, използвайки името на низа. Например:

#include <iostream>
using namespace std;
int main() {
	char name[5] = { 'J', 'o', 'h', 'n', '\0' };
	cout << "String value is: ";
	cout << name << endl;
	return 0;
}

Изход:

Достъп до низови стойности

Ето екранна снимка на кода:

Достъп до низови стойности

Code Обяснение:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
  2. Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
  3. Извикване на функцията main(), в която трябва да се добави логиката на програмата. { маркира началото на тялото на функцията main().
  4. Деклариране на низ от знаци и даване на име name. Низът ще съхранява стойността John. Допълнителното пространство ще съхранява нулевия знак.
  5. Отпечатване на текст на конзолата.
  6. Отпечатване на стойността на низа с име на конзолата.
  7. Функцията main() трябва да върне стойност, ако програмата работи добре.
  8. Край на тялото на функцията main().

Ето още един пример за използване на C++ стандартен низов клас:

#include <iostream>
#include <string>
using namespace std;
int main() {

	string name = "Guru99";

	cout << "The name is : " << name << endl;

	return 0;
}

Изход:

Достъп до низови стойности

Ето екранна снимка на кода:

Достъп до низови стойности

Code Обяснение:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
  2. Включване на стандартния клас низове в нашия код.
  3. Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
  4. Извикване на функцията main(), в която трябва да се добави логиката на програмата. { маркира началото на тялото на функцията main().
  5. Деклариране на низ и даване на името му name. Низът ще съхранява стойността Guru99.
  6. Отпечатване на стойността на името на низа заедно с някакъв текст на конзолата.
  7. Функцията main() трябва да върне стойност, ако програмата работи добре.
  8. Край на тялото на функцията main().

Функции за низове в C++

Често ще искате да манипулирате низове. C++ предоставя широк набор от функции, които можете да използвате за това. Тези функции са дефинирани в заглавката, така че трябва да я включим в кода си, за да използваме функциите. Нека обсъдим някои от тях:

strcpy()

Това е функцията за копиране на низове. Той копира един низ в друг низ.

Синтаксис:

strcpy(string1, string2);

Двата параметъра на функцията, string1 и string2, са низове. Функцията ще копира низа string2 в string1.

strcat()

Това е функцията за свързване на низове. Той свързва низове.

Синтаксис:

strcat(string1, string2);

Двата параметъра на функцията, string1 и string2, са низовете, които ще бъдат конкатенирани. Горната функция ще конкатенира низа string2 до края на низа string1.

strlen()

Това е функцията за дължина на низа. Връща дължината на низа, подадена му като аргумент.

Синтаксис:

strlen(string1);

Параметърът string1 е името на низа, чиято дължина трябва да се определи. Горната функция ще върне дължината на низа string1.

strcmp()

Това е функцията за сравняване на низове. Използва се за сравнение на низове.

Синтаксис:

strcmp(string1, string2);

Горната функция ще върне 0, ако низовете string1 и string2 са подобни, по-малко от 0, ако string1 < string2, и по-голямо от 0, ако string1 > string2.

Пример:

Следващият пример демонстрира как да използвате горните низови функции:

#include <iostream>
#include <cstring>
using namespace std;
int main() {

	char name1[10] = "Guru99";
	char name2[10] = "John";
	char name3[10];

	int len;
	strcpy(name3, name1);
	cout << "strcpy( name3, name1) : " << name3 << endl;

	strcat(name1, name2);
	cout << "strcat( name1, name2): " << name1 << endl;

	len = strlen(name1);
	cout << "strlen(name1) : " << len << endl;
	return 0;
}

Изход:

Функции за низове в C++

Ето екранна снимка на кода:

Функции за низове в C++

Code Обяснение:

  1. Включване на заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
  2. Включително стандарта заглавката в нашия код.
  3. Включва пространството от имена std, за да използва неговите класове и функции, без да го извиква.
  4. Извикване на функцията main(), в която трябва да се добави логиката на програмата. { маркира началото на тялото на функцията main().
  5. Деклариране на низ от 10 символа и даване на името му name1. Низът ще съхранява стойността Guru99.
  6. Деклариране на низ от 10 знака и даване на името name2. Низът ще съхранява стойността John.
  7. Деклариране на низ от 10 знака и даване на името name3.
  8. Деклариране на цяло число променлива на име лен.
  9. Копиране на низа name1 в низа name3.
  10. Отпечатване на стойността на низа name3 заедно с текст в конзолата. Трябва да се отпечата Guru99.
  11. Свързване на низа име2 с края на низ име1. Стойността на име1 вече е Guru99Джон.
  12. Отпечатване на стойността на низа name1 заедно с текст в конзолата. Трябва да се отпечата Guru99Джон.
  13. Определяне на дължината на низа с име name1 и присвояване на стойността на дължината на променливата len.
  14. Изписване на стойността на променливата len заедно с друг текст на конзолата.
  15. Функцията main() трябва да върне стойност, ако програмата работи добре.
  16. Край на тялото на функцията main().

Въпроси и Отговори

Да. Асистентите с изкуствен интелект могат да рефакторират масиви от символи в std::string, да актуализират свързани функции и да обясняват предимствата за безопасност. Разработчиците все пак трябва да преглеждат промените за гранични случаи, размери на буферите и предвидено поведение.

Да. Инструментите с изкуствен интелект генерират работещи примери, обясняват как се държат strcpy и strcat и сигнализират за рискове от препълване на буфера. Това ускорява разбирането, но самостоятелното изпълнение на кода остава най-добрият начин за потвърждаване на поведението.

std::string управлява паметта динамично и предоставя вградени операции като конкатенация и сравнение. C-стил низовете са фиксирани масиви от символи, завършващи с '\0', които изискват ръчна обработка на паметта и са по-податливи на грешки.

Те могат да причинят препълване на буфера, ако целевият масив е твърде малък. По-безопасните алтернативи включват strncpy, strncat или просто използване на операции std::string, които управляват паметта автоматично и намаляват тези рискове.

Обобщете тази публикация с: