web-dev-qa-db-fra.com

Équivalent C++ de Python String Slice?

En python, j'ai pu couper une partie d'une chaîne; en d'autres termes, imprimez simplement les caractères après une certaine position. Existe-t-il un équivalent à cela en C++?

Code Python:

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

Souhaitez imprimer: Pear Orange

14
David.Sparky

Oui, c’est la méthode substr :

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

Retourne une sous-chaîne [pos, pos + count). Si la sous-chaîne demandée dépasse la fin de la chaîne ou si count == npos, la sous-chaîne renvoyée est [pos, size ()). 

Exemple

#include <iostream>
#include <string>

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

Voir le courir

20
whoan

En C++, l'équivalent le plus proche serait probablement string :: substr (). Exemple:

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

(le premier paramètre correspond à la position initiale, le second à la longueur découpée). Le second paramètre par défaut est la fin de la chaîne (string :: npos).

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.

Notez que contrairement au python, le premier ne vérifie pas la plage: votre chaîne d'entrée doit être suffisamment longue. En fonction de votre utilisation finale pour la tranche, il peut exister d'autres solutions (par exemple, utiliser directement une plage d'itérateur au lieu de faire une copie, comme je le fais ici).

4
Mark B

On dirait que vous voulez string :: substr :

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

Ici string :: npos est synonyme de "jusqu'à la fin de la chaîne" (et c'est aussi par défaut mais je l'ai inclus pour plus de clarté).

3
cziemba

Vous pouvez faire quelque chose comme ceci en utilisant la classe string:

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

Il semble que C++ 20 aura des gammes https://fr.cppreference.com/w/cpp/ranges Conçues pour fournir, entre autres, du python. - comme tranchant http://ericniebler.com/2014/12/07/a-slice-of-python-in-c/ Je l'attends donc atterrir dans mon compilateur préféré et utiliser https://ericniebler.github.io/range-v3/

1
Refael Ackermann