2010-04-29 2 views
3

J'ai joué avec des pointeurs pour mieux les comprendre et je suis tombé sur quelque chose que je devrais pouvoir faire, mais je ne peux pas trier comment. Le code ci-dessous fonctionne bien - je peux sortir "a", "chien", "chaussettes", et "pantalons" - mais que se passe-t-il si je veux juste sortir le "o" de "chaussettes"? Comment ferais-je cela?Comment émettre un caractère individuel en utilisant char * [] = "something"

char *mars[4] = { "a", "dog", "sock", "pants" }; 

for (int counter = 0; counter < 4; counter++) 
{ 
    cout << mars[ counter ]; 
} 

S'il vous plaît pardonnez-moi si la question réponse quelque part - il y a plus de 30 pages d'articles C++ question relative pointeur, et j'ai passé environ 90 minutes à regarder à travers eux, ainsi que la lecture de divers (très instructifs), avant décider de demander.

Répondre

7

mars[i][j] affichera le 0ième caractère de la i 'e chaîne.

Donc mars[2][1] est 'o'.

+0

Ugh ... qui était ridiculement simple. Je pensais qu'il aurait juste produit un tableau à une dimension. – Azoreo

1
cout << mars[2][1] ; 

mars est un tableau de char * pour ainsi obtenir le omble chevalier individu que vous avez à l'index dans le tableau de char

0

mars[counter] est de type char *, pointant vers une chaîne terminée par zéro de caractères. Ainsi vous pouvez:

for (int counter = 0; counter < 4; counter++) 
{ 
    char * str = mars[ counter ]; 
    size_t len = strlen(str); 

    if (len >= 2) 
    cout << str[1]; 
} 
+0

Cette réponse est au-dessus de ma tête, malheureusement: 9 – Azoreo

2

Comme nous l'avons déjà souligné, les chaînes sont des tableaux. En fait, ce concept est porté sur le std::string la -class (qui, en passant, est le meilleur moyen de représenter des chaînes en C++), qui met en œuvre toutes les exigences d'un STL-Sequence. En outre, il implémente l'opérateur array-subscript. Cela signifie l'expression:

mars[i][j] 

fonctionnerait également si mars a été déclarée comme

std::vector<std::string> mars; 

qui est de façon beaucoup plus C++ de manipulation de ce. Je me rends compte que vous faites ceci pour apprendre des pointeurs, mais j'ai juste pensé que j'ajouterais ceci pour votre information. En outre, lors de l'apprentissage sur les pointeurs en C++, vous devriez apprendre aussi sur iterators, car ils sont generalizations of pointers.

0

Comme d'autres l'ont suggéré moyen facile, s'il vous plaît trouverez également un rond-point moyen de le faire;)

char *myChar = &mars[ 1 ][0]; 
int nPosOfCharToLocate = 1; 
myChar = myChar + nPosOfCharToLocate; 
cout <<*myChar<<endl; 
+0

Wimpy. J'utilise 'char const * myChar = (mars.begin() + 1) -> (données); '. –

Questions connexes