Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Строки в C++: C-строки vs std::string

C++ предоставляет два типа строковых представлений:

C-стиль: символьные строки

C-строки возникли в языке C и поддерживаются в C++. Это одномерный массив символов, завершённый нулевым символом '\0'. Таким образом, null-terminated строка содержит символы строки, за которыми следует null.

Объявление и инициализация строки, состоящей из слова "Hello". Размер массива на единицу больше длины слова, чтобы разместить нуль-терминатор:

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

Следуя правилу инициализации массивов, можно записать короче:

char greeting[] = "Hello";

Память для такой строки выглядит так:

Строки в C++: C-строки vs std::string

На самом деле, нуль-символ в конце строковой константы ставит компилятор автоматически при инициализации массива. Попробуем вывести строку:

Live Demo
#include <iostream>
using namespace std;
int main() {
    char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
    cout << "Greeting message: ";
    cout << greeting << endl;
    return 0;
}

Результат:

Greeting message: Hello

C++ поддерживает широкий набор функций для манипуляции null-terminated строками:

№Функция и назначение
1

strcpy(s1, s2);

Копирует строку s2 в s1.

2

strcat(s1, s2);

Конкатенирует s2 в конец s1.

3

strlen(s1);

Возвращает длину строки s1.

4

strcmp(s1, s2);

Возвращает 0, если s1 == s2; <0, если s1<s2; >0, если s1>s2.

5

strchr(s1, ch);

Возвращает указатель на первое вхождение символа ch в s1.

6

strstr(s1, s2);

Возвращает указатель на первое вхождение строки s2 в s1.

Пример использования некоторых функций:

Live Demo
#include <iostream>
#include <cstring>
using namespace std;
int main() {
    char str1[10] = "Hello";
    char str2[10] = "World";
    char str3[10];
    int len;
    // копия str1 в str3
    strcpy(str3, str1);
    cout << "strcpy(str3, str1) : " << str3 << endl;
    // конкатенация str1 и str2
    strcat(str1, str2);
    cout << "strcat(str1, str2): " << str1 << endl;
    // длина str1 после конкатенации
    len = strlen(str1);
    cout << "strlen(str1) : " << len << endl;
    return 0;
}

Результат:

strcpy(str3, str1) : Hello
strcat(str1, str2): HelloWorld
strlen(str1) : 10

Класс string в C++

Стандартная библиотека C++ предоставляет класс string, поддерживающий все вышеуказанные операции и многое другое. Пример:

Live Demo
#include <iostream>
#include <string>
using namespace std;
int main() {
    string str1 = "Hello";
    string str2 = "World";
    string str3;
    int len;
    // копия str1 в str3
    str3 = str1;
    cout << "str3 : " << str3 << endl;
    // конкатенация
    str3 = str1 + str2;
    cout << "str1 + str2 : " << str3 << endl;
    // длина str3
    len = str3.size();
    cout << "str3.size() : " << len << endl;
    return 0;
}

Результат:

str3 : Hello
str1 + str2 : HelloWorld
str3.size() : 10

Язык C

  1. Строки в C#: основы, операции и продвинутые техники
  2. Освоение операторов C++: полное руководство с практическими примерами
  3. Комментарии в C++: лучшие практики для читаемого и поддерживаемого кода
  4. Шаблоны классов в C++: практическое руководство
  5. Освоение строк в Java: создание, методы и лучшие практики
  6. Строковые представления в Java Enums: настройка toString() и лучшие практики
  7. Переменные и типы данных в C++: подробное руководство по int, double, char, string, bool
  8. Функции строк в C++: strcpy, strcat, strlen, strcmp — практические примеры
  9. Строки в C просто: объявление, ввод, вывод и библиотечные функции
  10. Класс String в Java: создание, манипуляции и основные методы