С++ эквивалент Python String Slice?

В python мне удалось разрезать часть строки; другими словами, просто напечатайте символы после определенной позиции. Есть ли эквивалент этого в С++?

Код Python:

text= "Apple Pear Orange"
print text[6:]

Будет напечатан: Pear Orange

Ответ 1

Да, это метод substr:

basic_string substr( size_type pos = 0,
                     size_type count = npos ) const;

Возвращает подстроку [pos, pos + count). Если запрошенная подстрока продолжается до конца строки или если count == npos, возвращаемая подстрока - [pos, size()).

Пример

#include <iostream>
#include <string>

int main(void) {
    std::string text("Apple Pear Orange");
    std::cout << text.substr(6) << std::endl;
    return 0;
}

Посмотрите, как он работает

Ответ 2

std::string text = "Apple Pear Orange";
std::cout << std::string(text.begin() + 6, text.end()) << std::endl;  // No range checking at all.
std::cout << text.substr(6) << std::endl; // Throws an exception if string isn't long enough.

Обратите внимание, что в отличие от python первое не проверяет диапазон: ваша строка ввода должна быть достаточно длинной. В зависимости от вашего конечного использования для среза могут быть и другие альтернативы (например, использование диапазона итераторов непосредственно вместо того, чтобы делать копию, как я здесь).

Ответ 3

Похоже, что вы хотите string:: substr:

std::string text = "Apple Pear Orange";
std::cout << text.substr(6, std::string::npos) << std::endl; // "Pear Orange"

Здесь string:: npos является синонимом "до конца строки" (а также по умолчанию, но я включил его для ясности).

Ответ 4

В С++ ближайшим эквивалентом, вероятно, будет строка:: substr(). Пример:

std::string str = "Something";
printf("%s", str.substr(4)); // -> "thing"
printf("%s", str.substr(4,3)); // -> "thi"

(первым параметром является начальная позиция, вторая - отрезанная длина). Второй параметр по умолчанию - конец строки (string:: npos).

Ответ 5

Вы можете сделать что-то вроде этого, используя класс string:

std::string text = "Apple Pear Orange";
size_t pos = text.find('Pear');