2017-01-27 3 views
0

J'ai besoin de remplir ce tableau via l'invite de l'utilisateur. Je pensais lire dans l'entrée de l'utilisateur une chaîne et ensuite assigner cette chaîne au tableau mais cela ne semble pas être la bonne façon d'aborder cela. Est-ce que quelqu'un peut m'aider?remplir un tableau char avec une chaîne? C++

L'erreur que je reçois lit « tableau de type tableau [100] est incessible »

#include <iostream> 
    #include <cstdlib> 
    #include <ctime> 
    #include <string.h> 

    using namespace std; 

    int main() 
    { 
     string theString; 

     char array[100]; // ARRAY MAX SIZE 

     int length = sizeof(array)-1; 
     char * ptrHead = array; 
     char *ptrTail = array + length - 1; 


     //USER PROMPTS & ARRAY FILL 
     cout << "Please enter a string to be reverse: " << endl; 
     cin >> theString; 
     array= theString; 

     //WHILE LOOP SWAPPING CHARACTERS OF STRING 
     while (ptrHead < ptrTail) 
     { 
      char temp = *ptrHead; 
      *ptrHead = *ptrTail; 
      *ptrTail = temp; 

      ptrHead++; 
      ptrTail--; 
     } 

     cout << array << endl; 

     return 0; 
    } 

Répondre

1

cin >> array; devrait mettre directement l'entrée dans le tableau, que je devine est ce que vous voulez

De plus, il y a un problème dans votre logique d'inversion de chaîne. Vous inversez le tableau entier, pas seulement la partie qui a été remplie, ce qui placera la partie remplie à la fin du tableau. Pensez à utiliser une fonction comme strlen() pour savoir combien de temps l'entrée réelle est.

0

Les tableaux ne sont pas assignables. Vous devez utiliser strcpy ici:

Mais pour cela, vous devrez convertir theString en C comme chaîne.

strcpy(array, theString.c_str()); 

puis ajustez votre pointeur ptrTail aussi, comme suit:

int length = theString.size(); 
char *ptrTail = array + length - 1; 

See Here

+0

Il est la compilation et l'exécution maintenant, mais il n » t inverser la chaîne plus. – user7472073

+0

@ user7472073 Voir le lien dans mon message – P0W

+0

Oh, je vois. Merci beaucoup! – user7472073

0

Vous pouvez copier le string au tableau avec strcpy ou entrer les données directement au tableau avec cin >> array, mais la meilleure solution serait de ne pas utiliser un tableau char, utilisez simplement le string dans votre algorithme. C'est aussi une meilleure solution, car vous pouvez déborder une taille fixe char tableau

cout << "Please enter a string to be reverse: " << endl; 
cin >> theString; 

for (unsigned int i = 0; i <= theString.size()/2; ++i) 
    swap(theString[i], theString[theString.size() - 1 - i); 

cout << theString<< endl; 

Modifier

Les mêmes pointeurs en utilisant:

std::cout << "Please enter a string to be reverse: " << std::endl; 
std::cin >> theString; 

char* i = &theString[0]; 
char* j = &theString[theString.size() - 1]; 
for (; i < j; ++i, --j) 
    std::swap(*i, *j); 

std::cout << theString << std::endl; 
+0

Nous avons été explicitement demandé aux pointeurs de l'utilisateur. C'est la route que j'aurais suivie si ce n'était pas une exigence. Merci quand même! – user7472073

+0

@ user7472073 - Vous pouvez toujours utiliser des pointeurs pour faire l'inversion de la chaîne. Le problème est que vous avez utilisé un tableau char pour entrer les données. – PaulMcKenzie

+0

@ user7472073 voir modifier – FamZ