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
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 ()).
#include <iostream>
#include <string>
int main(void) {
std::string text("Apple Pear Orange");
std::cout << text.substr(6) << std::endl;
return 0;
}
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.
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).
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).
Sie können so etwas mit der String-Klasse machen:
std::string text = "Apple Pear Orange";
size_t pos = text.find('Pear');
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/