2010-04-26 7 views
0

Ma tâche se compose de deux parties. D'abord, je dois créer un tableau de globes de 100 éléments et y insérer du texte en utilisant cin. Ensuite, calculez la quantité de caractères et créez un tableau dédié avec la longueur du texte saisi. Je pensais à la solution suivante:tableaux créés dynamiquement

char[100]inputData; 

int main() 
{ 

    cin >> inputData >> endl; 

    int length=0; 
    for(int i=0; i<100; i++) 
    { 
      while(inputData[i] == "\0") 
      { 
       ++count; 
      } 
    } 
char c = new char[count]; 

ce que je pense bien?

La deuxième partie de la tâche consiste à introduire dans le premier programme un tableau de pointeurs créé dynamiquement pour tous les mots insérés. Ajouter un nouveau mot devrait imprimer tous les mots précédents et s'il n'y a pas d'espace pour les mots suivants, la taille du tableau inputData devrait être augmentée deux fois. Et pour être honnête, c'est un peu trop pour moi. Comment je peux créer des pointeurs sur des mots spécifiquement? Et comment puis-je augmenter la taille du tableau global sans perdre son contenu? Avec un tableau temporaire?

+3

Est-ce que c'est un devoir? –

+0

"Ma tâche consiste en deux parties: d'abord, je dois créer un tableau global de 100 éléments" - non, vous n'avez certainement pas besoin de faire cela. –

+0

@Tom: Je l'espère vraiment - sinon c'est complètement fou (et même comme devoir, c'est un peu discutable). –

Répondre

2

Quel que soit le reste de votre question, vous semblez avoir quelques idées erronées au sujet while boucles. Regardons ce code.

for(int i=0; i<100; i++) { 
    while(inputData[i] == "\0") { 
     ++count; 
    } 
} 

Tout d'abord, "\0" n'est pas le caractère NUL. C'est un pointeur vers une chaîne contenant uniquement l'octet NUL final. Vous voulez plutôt '\0'. En supposant que ce changement, il y a encore des problèmes. Voyons ce qui va se passer:

  • Comment fonctionne une boucle while? Il exécute le corps à plusieurs reprises, tant que la condition est vraie.
  • Quand une boucle while est-elle terminée? Lorsque la condition est finalement rendue fausse en exécutant le corps.
  • Quelle est l'état de votre boucle? inputData[i] == '\0', après correction.
  • Quel est le corps? ++count.
  • Can ++count Est-il possible de modifier la valeur de la condition? Non, car il ne change pas i. Par conséquent, si inputData[i] n'est pas l'octet NUL, la boucle while ne s'exécute jamais.
  • Mais, si inputData[i] est l'octet NUL, la boucle while s'exécute pour toujours.
  • En supposant que vous avez lu une chaîne correcte dans inputData, alors à un certain point inputData[i] sera NUL, et vous aurez une boucle infinie.

Pour compter la longueur d'une chaîne C standard, il suffit de faire ce

count = strlen(inputData); 

Si pour une raison quelconque, vous vraiment avoir à écrire une boucle, puis les travaux suivants:

int len = 0, 
while (inputData[len] != '\0') { 
    len++; 
} 

Après la boucle, len contient la longueur de la chaîne.

+0

pas ce qu'il veut. Il pourrait le faire s'il est dit! = '\ 0' – pm100

+0

Oups. Edité pour réparer. –

0

La taille des tableaux globaux ne peut pas être modifiée dynamiquement sauf s'ils sont un pointeur vers un tableau, auquel cas vous pouvez les effacer et les réaffecter. Peut-être que ce que vous recherchez est un tableau à redimensionnement automatique, comme un vecteur std :: vector. Vous pouvez voir combien de lettres vous avez dans le tableau en appelant size() sur le vecteur, et vous pouvez augmenter la taille du tableau en appelant resize().

Bien que n'étant pas la solution la plus élégante, il pourrait être un peu plus facile à utiliser pour le moment.

1
#include <iostream> 
#include <string> 

int main() 
{ 
    std::string input; 
    std::getline(std::cin, input); 
} 
Questions connexes