wake-up-neo.net

C++ - Äquivalent zu Python String Slice?

In Python konnte ich einen Teil eines Strings schneiden; Mit anderen Worten, drucken Sie die Zeichen nur nach einer bestimmten Position. Gibt es in C++ ein Äquivalent dazu?

Python-Code:

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

Würde drucken: Pear Orange

14
David.Sparky

Ja, es ist die substr Methode:

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

Gibt einen Teilstring [pos, pos + count) zurück. Wenn die angeforderte Teilzeichenfolge über das Ende der Zeichenfolge hinausgeht oder count == npos ist, lautet die zurückgegebene Teilzeichenfolge [pos, size ()). 

Beispiel

#include <iostream>
#include <string>

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

Lass es laufen

20
whoan

In C++ wäre das nächstliegende Äquivalent wahrscheinlich string :: substr (). Beispiel:

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

(Der erste Parameter ist die Anfangsposition, der zweite ist die in Scheiben geschnittene Länge.) Der zweite Parameter ist standardmäßig auf das Ende des Strings (string :: npos) eingestellt.

6
Tarc
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.

Beachten Sie, dass der erste Bereich im Gegensatz zu Python keine Bereichsüberprüfung durchführt: Ihre Eingabezeichenfolge muss lang genug sein. Abhängig von Ihrem Endverwendungszweck für das Slice gibt es möglicherweise auch andere Alternativen (z. B. die Verwendung eines Iteratorbereichs direkt, anstatt eine Kopie wie hier zu erstellen).

4
Mark B

Klingt wie du willst string :: substr :

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

Hier ist string :: npos synonym mit "bis zum Ende des Strings" (und ist auch Standard, aber ich habe es der Klarheit halber beigefügt).

3
cziemba

Sie können so etwas mit der String-Klasse machen:

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

Es sieht so aus, als würde C++ 20 Ranges https://de.cppreference.com/w/cpp/ranges Haben, die unter anderem Python bereitstellen sollen -ähnliches Schneiden http://ericniebler.com/2014/12/07/a-slice-of-python-in-c/ Also ich warte darauf um in meinem Lieblingscompiler zu landen, und benutze inzwischen https://ericniebler.github.io/range-v3/

1