2009-11-16 5 views
0

J'ai un tableau de chaînes de numéros de téléphone, et je dois insérer des traits d'union dans eux. quelle fonction de chaîne dois-je utiliser, et comment? merci. : Dinsérer un trait d'union dans une chaîne C++

+1

Est-ce une question de devoirs? Où voulez-vous avoir le trait d'union? Donnez un exemple de numéro de téléphone d'entrée et son numéro de téléphone de sortie correspondant. – wilhelmtell

+0

Vos chaînes sont-elles des 'std :: string' instances, ou' char * 's? –

+1

oui, c'est une tâche de devoirs 3823920578 = 382-392-0578 – user212463

Répondre

1

Utilisez les fonctions de chaîne STL. Itérer sur le tableau de chaînes, et pour chaque chaîne, faites ceci:

str_num = str_num.substr(0,3) + "-" + str_num.substr(3,3) + "-" + str_num.substr(6,4); 

EDIT: Vous pouvez utiliser insert() aussi, je pense que ce serait une meilleure façon.

+0

Non. Vous concaténez. – wilhelmtell

+0

C'est vraiment inefficace, cela fait plusieurs copies inutiles de la chaîne. –

+0

Merci beaucoup! ça a fonctionné parfaitement. : D – user212463

1

Eh bien, je ne vais pas donner la réponse, mais la chose la plus simple à faire est d'utiliser la méthode std::string::insert, en supposant que vous faites C++.

Pour les chaînes C, vous devrez copier manuellement les caractères. J'utiliserais probablement sprintf.

+2

strncat serait la fonction de chaîne de style C la plus utile. –

+0

Vous auriez besoin d'au moins trois appels distincts à 'strcat' ou similaire, ou vous pourriez faire quelque chose comme' sprintf (buf, "% .3s -% .3s -% .4s", s, s + 3, s + 6) '. Juste une question de style, vraiment. –

-1

Vous pouvez utiliser la fonction strtok pour la diviser en jetons.

char * strtok (char * str, const char * delimiters); 
+2

Vous ne pouvez pas diviser un sans délimiteur. Où est le délimiteur dans un nombre à 10 chiffres pour le diviser en chiffres (3,3,4)? –

+0

@Joy Dutta Je suis d'accord, mais quand j'ai posté la réponse quelque chose d'autre était dans mon esprit. Maintenant j'aurais utilisé des itérateurs. – Secko

0

Qu'est-ce que vous voulez est d'ajouter deux caractères à chaque chaîne, dans deux positions spécifiques.

Créez une fonction qui prend une chaîne de numéro de téléphone unique et ajoute les tirets le cas échéant. C'est un bon exemple où il est facile d'utiliser la concaténation de chaînes, mais c'est une mauvaise habitude. Au lieu de cela, vous pouvez utiliser string::insert() pour placer les traits d'union le cas échéant. Une fois cette fonction simple écrite, il suffit de parcourir la matrice et d'appliquer la fonction sur chaque élément. Par coïncidence, la fonction for_each() peut faire exactement cela. Vous le trouverez dans <algorithm>.

#include<string> 
#include<algorithm> 

void with_hyphens(string& phone) 
{ 
    // as explained above 
} 

// ... 
{ 
    for_each(array, array + ARRAY_LENGTH, &with_hyphens); 
} 
Questions connexes