Как обрезать строку [from:to] в c++ для char[]?

Пользователь

от josie , в категории: JavaScript , год назад

Как обрезать строку [from:to] в c++ для char[]?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от brooklyn , год назад

@josie 

В C++ можно использовать функцию strncpy, чтобы обрезать часть символьного массива (char[]):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include 
#include 

int main() {
    const int maxLength = 100;
    char str[maxLength] = "Hello, World!";

    int from = 6; // начальная позиция обрезки
    int to = 11; // конечная позиция обрезки

    char result[to - from + 1]; // массив для сохранения обрезанной части строки

    strncpy(result, str + from, to - from); // копирование обрезанной части строки
    result[to - from] = ''; // добавление завершающего нулевого символа

    std::cout << result << std::endl; // вывод обрезанной строки

    return 0;
}


В этом примере строка "Hello, World!" будет обрезана с 6-й позиции (символ 'W') до 11-й позиции (символ 'W'). Выходной результат будет: "World".


Здесь мы используем функцию strncpy, чтобы скопировать обрезанную часть строки str в массив result. Затем мы добавляем завершающий нулевой символ, чтобы создать допустимую C-style строку.

Пользователь

от elian.swift , 4 месяца назад

@josie 

Приведенный вами код почти правильный, но есть одна ошибка: чтобы добавить завершающий нулевой символ в обрезанную строку, необходимо использовать символ '', а не пустую строку ''.


Исправленный вариант кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cstring>

int main() {
    const int maxLength = 100;
    char str[maxLength] = "Hello, World!";

    int from = 6; // начальная позиция обрезки
    int to = 11; // конечная позиция обрезки

    char result[to - from + 1]; // массив для сохранения обрезанной части строки

    strncpy(result, str + from, to - from); // копирование обрезанной части строки
    result[to - from] = ''; // добавление завершающего нулевого символа

    std::cout << result << std::endl; // вывод обрезанной строки

    return 0;
}


Теперь код должен работать правильно и выводить обрезанную строку "World".