2017-07-02 3 views
-2

J'ai écrit du code pour stocker des valeurs dans un tableau 2D, comme le format suivant, et cela fonctionne très bien.C++ initialiser et remplir un tableau 2D avec une variable

//Create array 
double MyPoints[25][3] = {{4,3,1},{6,4,1},{7,3,1},{7,6,1},{6,7.5,1},{3,6,1},{4,5,2},{5,6.5,2},{6,9,2},{3.5,8,2},{6,5,3},{6,6,3},{9,4,3},{9,5,3},{8,4,4},{9.5,3,4},{10,4,4},{11,6,4},{9,6,4},{8,7,5},{10,7,5},{11,9,5},{8,10,5}} ; 
cout << "Array Filled" << endl; 

// Print Array 
    for (int c = 0; c < 25; c++) 
    { 
     for (int d = 0; d < 3; d++) 
     { 
      cout << MyPoints [c][d] << " Hellow "; 
     } 
     cout << endl; 
    } 

mais je veux stocker les valeurs de tableau dans la variable, puis attribuez-lui variable (qui détiennent des valeurs de tableau à l'intérieur) pour remplir le tableau MyPoints, il ne fonctionne pas !!.

String MyVar = {{4,3,1},{6,4,1},{7,3,1},{7,6,1},{6,7.5,1},{3,6,1},{4,5,2},{5,6.5,2},{6,9,2},{3.5,8,2},{6,5,3},{6,6,3},{9,4,3},{9,5,3},{8,4,4},{9.5,3,4},{10,4,4},{11,6,4},{9,6,4},{8,7,5},{10,7,5},{11,9,5},{8,10,5}} ; 

double MyPoints [25][3] = MyVar ; 
cout << "Array Filled" << endl; 

Qu'est-ce que je fais mal? Comment le corriger.

+1

Rien de tel qu'un type 'String' en C++ standard. Pouvez-vous clarifier ce que vous essayez de réaliser? Veuillez prendre le [tour] (https://stackoverflow.com/tour) et lire la [page d'aide] (https://stackoverflow.com/help). – Ron

+1

Pourquoi voulez-vous avoir une variable séparée? Les listes d'initialiseurs contreventés n'ont pas de type, donc la seule façon pour que cela fonctionne est si MyVar est un tableau 2d, mais alors vous n'avez plus besoin de MyPoints ... – Rakete1111

+0

J'ai besoin de MyVar, Provoquer le texte n'est pas statique comme je l'ai écrit, mais ce texte "{{4,3,1}, {6,4,1}, {7,3,1}, {7,6,1}, {6,7.5,1 }, {3,6,1}, {4,5,2}, {5,6,5,2}, {6,9,2}, {3,5,8,2}, {6,5,3}, {6,6,3}, {9,4,3}, {9,5,3}, {8,4,4}, {9,5,3,4}, {10,4,4}, {11 , 6,4}, {9,6,4}, {8,7,5}, {10,7,5}, {11,9,5}, {8,10,5}}, "Généré d'un autre code. –

Répondre

0
#include <iostream> 

int main() 
{ 
    double MyPoints[25][3] = {{ 
     0, 
    }}; 

    std::string text = "{4,3,1},{6,4,1},{7,3,1},{7,6,1},{6,7.5,1},{3,6,1},{4,5,2},{5,6.5,2},{6,9,2},{3.5,8,2},{6,5,3},{6,6,3},{9,4,3},{9,5,3},{8,4,4},{9.5,3,4},{10,4,4},{11,6,4},{9,6,4},{8,7,5},{10,7,5},{11,9,5},{8,10,5}"; 


    for (int c = 0; c < 25; c++) 
    { 
     std::sscanf(text.c_str(), "{%lf,%lf,%lf},", &MyPoints[c][0], &MyPoints[c][1], &MyPoints[c][2]); 
     text = text.substr(text.find("},") + 2); 
    } 
    // Print Array 
    for (int c = 0; c < 25; c++) 
    { 
     for (int d = 0; d < 3; d++) 
      std::cout << MyPoints[c][d] << " Hellow "; 
     std::cout << std::endl; 
    } 
} 

Code sans utiliser regex ou stringstream (Presque C, pas C++). Vous pouvez également modifier les valeurs du tableau 2D par std::cin >> M[x][y] ou M[x][y]=value.

+0

HJ S .. merci pour la réponse, je vais essayer ce code et vous donner un retour .. –

+0

HJ S .. pourquoi utiliser "{% lf,% lf,% lf}, "? –

+0

Vous pouvez trouver la syntaxe scanf [ici] (http://en.cppreference.com/w/cpp/io/c/fscanf). Je préfère '>>' 'scanf' /' sscanf' en C++, mais scanf/printf est une chaîne formatée facile à manipuler. –