2010-01-29 7 views
8

J'écris un programme qui nécessite la saisie d'une chaîne, puis son découpage en lettres individuelles. Essentiellement, j'ai besoin d'aide pour trouver un moyen de transformer "string" en ["s", "t", "r", "i", "n", "g"]. Les chaînes sont également stockées en utilisant le type de données chaîne au lieu d'un tableau de caractères par défaut. Je voudrais le garder comme ça et éviter les chars, mais je l'utiliserai si nécessaire.Scinder une chaîne en un tableau de caractères en C++

Toute aide serait bien, merci d'avance.

+0

Avez-vous besoin de faire quelque chose aux lettres une fois qu'il est divisé? C'est-à-dire, vous devez mettre les lettres dans une sorte de structure de données autre que la «chaîne»? – Potatoswatter

+0

Ceci est une question idiote, une chaîne est un tableau de caractères. – Ian

Répondre

12
string a = "hello"; 
cout << a[1]; 

J'espère que l'explique

+0

Je ne me sens pas comme je ne suis pas ici pour donner des tutoriels, juste des réponses. –

+1

Pour l'enregistrement, vous pouvez aussi simplement faire: cout << "hello" [1]; – AshleysBrain

+2

@AshleysBrain: Ou cout << 1 ["bonjour"]; – ybungalobill

1

Une chaîne est juste une séquence du caractère sous-jacent (à savoir char pour std :: string et wchar_t pour std :: wstring).

En raison de cela, vous obtenez facilement chaque lettre:

for (std::string::size_type l = 0; l < str.length(); ++l) 
{ 
    std::string::value_type c = str[l]; 
} 
+4

Vous êtes :: gonna :: scare :: him :: with :: all :: that :: stuff. imo en utilisant 'int' ou, mieux encore,' size_t' fonctionnera sur toutes les plateformes existantes et c'est beaucoup plus clair. –

14

En supposant que vous avez déjà la chaîne entrée:

string s("string"); 
vector<char> v(s.begin(), s.end()); 

Cela remplira le vecteur v avec les caractères d'une chaîne.

+0

La meilleure solution que j'ai vue! Merci beaucoup. – Fomentia

1

Essayez d'utiliser la méthode de c_str()std::string:

#include <string> 
using namespace std; 

int main(void) 
{ 
    string text = "hello"; 
    size_t length = text.length() + sizeof('\0'); 
    char * letters = new char[length]; 
    strcpy(letters, length.c_str()); 
    for (unsigned int i = 0; i < length; ++i) 
    { 
     cout << '[' << i << "] == '" << letters[i] << "'\n"; 
    } 
    return EXIT_SUCCESS; 
} 
+0

L'ajout de sizeof ('\ 0') à la longueur n'est pas nécessaire car il peut être supérieur à 1 et le tableau alloué aura alors une taille plus grande que nécessaire. Ajouter 1 au lieu de sizeof ('\ 0') est meilleur. – George

+1

George, sizeof (char) est _always_ 1. – paxdiablo

+0

Pas vrai! sizeof (char) n'est pas * toujours * 1. J'ai travaillé avec une puce DSP où * tout * était au moins 32 bits, char, court, int - sizeof (char) == sizeof (court) == sizeof (int). La norme C indique simplement que sizeof (char) <= sizeof (court) <= sizeof (int) mais ne nécessite pas sizeof (char) == 1. Un des effets secondaires était que le transtypage en char et BYTE pour limiter les valeurs à 8 bits n'a eu aucun effet puisque le type de données était nativement 32 bits. Certes, c'était une architecture inhabituelle, mais la norme C ne dit certainement pas sizeof (char) == 1. – Ryan

Questions connexes