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 string
copie, 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 string
taille, si elle est supérieure à une donnée de string
taille, jeté out_of_range
exception. 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 à string
la fin.
substr
substr
Un retour string
, qui est l'origine de string
tout ou partie de la copie non, peut être passé à substr
une 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 string
la taille, la substr
fonction lancera out_of_range
une exception.
Si le nombre est supérieur à la position de départ en plus de la string
taille obtenue, substr
ajuste la valeur de comptage, copiez uniquement à string
la fin.
D'autres méthodes de modification de la chaîne
En plus de recevoir la version iterator insert
, à l' erase
extérieur, string
il 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 string
type est également prévu pour accepter gamme de style C de caractères insert
et assign
versions. Par exemple, un tableau de caractères sera caractère nul insert
ou assign
à un string
.
const char* cp = "Stately,plump Buck";
string s;
s.assign(cp,7);
s.insert(s.size(),cp+7);
Nécessaire assign
nombre de caractères attribués à être inférieure ou égale cp
taille 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 string
caractères ou dans le courant sous - chaîne string
ou 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
string
Classe définit deux fonctions membres supplémentaires: append
et replace
. Ces deux fonctions peuvent changer le string
contenu.
append
Le fonctionnement est string
une forme abrégée de fin d'insertion:
string s("C++ Primer"), s2 = s;
s.insert(s.size(), " 4th Ed.");
s2.append(" 4th Ed.");
replace
Le fonctionnement est invoqué erase
et insert
une 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
assign
Toujours remplacerstring
tout le contenu.append
Toujours ajouter un nouveau personnage àstring
la 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.
insert
Il 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
string
Classe fournit six éléments de recherche différentes fonctions, chacun a quatre surcharges. Chaque opération de recherche renvoie une string::size_type
valeur qui représente la position du match d'index se produit, si la recherche échoue, appelé le retour string::npos
des static
membres.
bibliothèque standard npos
est défini comme un const string::size_type
type et initialise la valeur -1
. Étant donné que cela signifie que la valeur initiale npos
égale à une string
taille maximale possible. Étant donné que la fonction de recherche renvoie string::size_type
une valeur, le type est un unsigned
type donc, avec un int
ou avec d' autres types de symboles classe contient ces fonctions renvoient la valeur est pas une bonne idée.
find
La 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 pos
point de départ pour rechercher le caractère, et ce caractère est un nombre, et donc find_first_of
sera 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_of
Recherche et donnéstring
dans l' un des dernier caractère dans un caractère de match.find_last_not_of
Enfin, ne figurent pas dans une recherche donnéestring
de caractères.
string river("Mississippi");
auto first_pos = river.find("is"); //1
auto last_pos = river.rfind("is"); //4
fonction de comparaison
string
Fournir un ensemble de compare
fonctions que la fonction C strcmp
fonction est similaire, selon s est égal à, supérieur à, inférieur à la chaîne de caractères spécifiée, s.compare
retourne 0, ou un entier négatif.
conversion numérique
Les données et la bibliothèque standard de string
conversion entre.
Si vous string
ne pouvez pas être convertie en une valeur numérique, ces fonctions renvoient une invalid_argument
exception.
Si la valeur convertie ne peut pas être représentée par tout type, il renvoie une out_of_range
exception.