D'autres opérations de chaîne

En plus de la coopération avec des conteneurs séquentiels, stringégalement de type offre un certain nombre d'opérations supplémentaires.

D'autres méthodes de chaîne de construction

char noNull[] = { 'H','i' };
string s1(cp);      //拷贝cp中的值,直到遇到空字符
string s2(noNull,2);    //从noNull拷贝两个字符
string s3(noNull);  //未定义,noNull不是以空字符结束
string s4(cp+6,5);  //从cp[6]开始,拷贝5个字符
string s5(s1,6,5);  //从s1[6]开始,拷贝5个字符
string s6(s1,6);    //从s1[6]开始,直到s1末尾
string s7(s1,6,20); //从s1[6]开始,直到s1末尾
string s8(s1, 16);  //抛出一个out_of_range异常

Quand const char*créé string, le point de moût de matrice à points est zéro terminal, le caractère nul arrête l' opération de copie. Mais si elle est adoptée au constructeur un seul chef, il n'a pas le tableau est terminé nul. Deux types de situations non définies:

  • Ne pas passer les valeurs calculées et la matrice ne sont pas à zéro terminal.
  • Donnée calculé, mais le nombre est supérieur à la taille du tableau.

De la stringcopie, il peut être muni d'une position de départ en option et une valeur de comptage doit être inférieure ou égale à une position de début d'une donnée de stringtaille, si elle est supérieure à une donnée de stringtaille, jeté out_of_rangeexception. Si vous passez une valeur de comptage à partir d' un endroit donné pour commencer la copie beaucoup de caractère. Peu importe le nombre de caractères nécessaires copies, à la copie de la bibliothèque standard à stringla fin.

substr

substrUn retour string, qui est l'origine de stringtout ou partie de la copie non, peut être passé à substrune position de début optionnelle et la valeur de comptage.

string s("Hello World");
string s2 = s.substr(0, 5);
string s3 = s.substr(6);
string s4 = s.substr(6, 11);
string s5 = s.substr(12);   //抛出 out_of_range 异常

Si la position de départ sur stringla taille, la substrfonction lancera out_of_rangeune exception.

Si le nombre est supérieur à la position de départ en plus de la stringtaille obtenue, substrajuste la valeur de comptage, copiez uniquement à stringla fin.

D'autres méthodes de modification de la chaîne

En plus de recevoir la version iterator insert, à l' eraseextérieur, stringil est également prévu dans la version acceptée du sujet. Indique la position Subscript de départ supprimé ou la position avant que la valeur donnée à insérer dans.

s.insert(s.size(),5,'!');   //在s的末尾插入5个感叹号
s.erase(s.size()-5,5);      //从s删除最后5个字符

La bibliothèque standard stringtype est également prévu pour accepter gamme de style C de caractères insertet assignversions. Par exemple, un tableau de caractères sera caractère nul insertou assignà un string.

const char* cp = "Stately,plump Buck";
string s;
s.assign(cp,7); 
s.insert(s.size(),cp+7);

Nécessaire assignnombre de caractères attribués à être inférieure ou égale cptaille de caractère du tableau pointé ( à l' exclusion du caractère nul à la fin).

insert Le caractère spécifié est inséré avant la position spécifiée à.

Vous pouvez également être spécifié d'autres stringcaractères ou dans le courant sous - chaîne stringou le impartie courant string.

string s = "some string";
string s2 = "some other string ";
s.insert(0, s2);    //在s中位置0之前插入s2的拷贝   
//在s[0]之前插入s2中s2[0]开始的s2.size()个字符
s.insert(0,s2,0,s2.size());

et remplacer la fonction append

stringClasse définit deux fonctions membres supplémentaires: appendet replace. Ces deux fonctions peuvent changer le stringcontenu.

appendLe fonctionnement est stringune forme abrégée de fin d'insertion:

string s("C++ Primer"), s2 = s;
s.insert(s.size(), " 4th Ed.");
s2.append(" 4th Ed.");

replaceLe fonctionnement est invoqué eraseet insertune forme de:

string s("C++ Primer 4th Ed."), s2 = s;
s.erase(11, 3);
s.insert(11, "5th");
s2.replace(11, 3, "5th");


Changer diverses chaîne de fonction surchargée

  • assignToujours remplacer stringtout le contenu.
  • appendToujours ajouter un nouveau personnage à stringla fin.
  • replace Vous pouvez supprimer la plage spécifiée des éléments disponibles de deux façons:
    • La plage peut être spécifiée par un emplacement et une longueur.
    • Il peut être spécifié par une plage de iterator.
  • insertIl permet deux manières de spécifier le point d'insertion: indiçage ou itérateur avant l'index spécifié ou d'un nouvel élément est inséré dans l'itérateur.

opération de recherche de chaîne

stringClasse fournit six éléments de recherche différentes fonctions, chacun a quatre surcharges. Chaque opération de recherche renvoie une string::size_typevaleur qui représente la position du match d'index se produit, si la recherche échoue, appelé le retour string::nposdes staticmembres.

bibliothèque standard nposest défini comme un const string::size_typetype et initialise la valeur -1. Étant donné que cela signifie que la valeur initiale nposégale à une stringtaille maximale possible. Étant donné que la fonction de recherche renvoie string::size_typeune valeur, le type est un unsignedtype donc, avec un intou avec d' autres types de symboles classe contient ces fonctions renvoient la valeur est pas une bonne idée.

findLa fonction la plus simple pour effectuer la recherche. Il recherche le paramètre de chaîne spécifiée, il est trouvé, l'indice de la première position de correspondance est retourné, sinon npos.

string name("AnnaBelle");
auto pos1 = name.find("Anna");  //0

Pour trouver un emplacement dans la chaîne donnée correspond à un caractère:

string numbers("0123456789"), name("r2d2");
auto pos = name.find_first_of(numbers);     //1

Rechercher le premier paramètre est pas dans la quantité de caractères:

string numbers("0123456789");
string dept("03714p3");
auto pos = dept.find_first_not_of(numbers);  //5

Indiquez où commencer la recherche

L'opération peut être passé à trouver une position de départ alternatif, ce paramètre optionnel spécifie l'emplacement pour lancer la recherche, par défaut, cet emplacement est réglé sur 0.

Un modèle de programmation commune est le paramètre optionnel dans la boucle de chaîne à rechercher toute la chaîne qui apparaît:

string numbers("0123456789"), name("r2d2");
string::size_type pos = 0;
while((pos = name.find_first_of(numbers,pos))!= string::npos)
{
    cout << "found number at index:" << pos
    << " element is " << name[pos] << endl;
    ++pos;
}

La deuxième étape depuis le début, à partir du pospoint de départ pour rechercher le caractère, et ce caractère est un nombre, et donc find_first_ofsera le retour répété pos.

Recherche inversée

La bibliothèque offre également une opération de recherche de droite à gauche:

  • rfind fonction membre recherche le dernier match, que l'enfant apparaît la position droite de la chaîne.
  • find_last_ofRecherche et donné stringdans l' un des dernier caractère dans un caractère de match.
  • find_last_not_ofEnfin, ne figurent pas dans une recherche donnée stringde caractères.
string river("Mississippi");
auto first_pos = river.find("is");  //1
auto last_pos = river.rfind("is");  //4

fonction de comparaison

stringFournir un ensemble de comparefonctions que la fonction C strcmpfonction est similaire, selon s est égal à, supérieur à, inférieur à la chaîne de caractères spécifiée, s.compareretourne 0, ou un entier négatif.

conversion numérique

Les données et la bibliothèque standard de stringconversion entre.

Si vous stringne pouvez pas être convertie en une valeur numérique, ces fonctions renvoient une invalid_argumentexception.

Si la valeur convertie ne peut pas être représentée par tout type, il renvoie une out_of_rangeexception.

Je suppose que tu aimes

Origine www.cnblogs.com/xiaojianliu/p/12497211.html
conseillé
Classement