2 Question: J'essaie actuellement de sauvegarder un ensemble d'entiers dans un tableau int, en red√©finissant la cha√ģne en nombres, puis en le stockant dans le tableau

question créée à Wed, May 8, 2019 12:00 AM

J'essaie de convertir le texte d'entr√©e /nombre (cha√ģne), qui inclura tous les caract√®res, mais je souhaite s√©parer les nombres des caract√®res et les stocker dans un tableau d'entiers, une fois qu'il est converti √† partir d'une cha√ģne.

Je pense que le probl√®me r√©side dans le fait que la cha√ģne est convertie en un entier en utilisant 060035099111110101035062, mais je n'arrive pas √† d√©tecter le probl√®me.

Actuellement, le code accepte toutes les entr√©es et les transforme en cha√ģne, la cha√ģne est ensuite v√©rifi√©e caract√®re par caract√®re, et tous les nombres sans s√©paration par une virgule ou un espace sont additionn√©s, une fois une virgule ou un espace, ou tout autre caract√®re. s√©pare le nombre, le nombre dans son ensemble est ajout√© au tableau, puis continue √† rechercher d'autres nombres dans la cha√ģne.

Des idées? Exemple d'entrée1: 12, 13, 15     Exemple d'entrée2: 12 13 15         Exemple d'entrée3: 12ab13cd15ef

Résultat dans un tableau de nombres entiers: 0 [12] 1 [13] 2 [15] Ces nombres seront utilisés dans l'ordre spécifique, en utilisant les nombres dans le tableau.

stoi()     
0
2 réponses                              2                         

Je vois pas mal de problèmes avec votre code.

  • Avant C ++ 11,

    #include<iostream>
    #include<string>
    #include <sstream>
    using namespace std;
    
    int main()
    {
        string datainput, str1, str3;
        cin >> datainput;
        int n = 0, raycount = 0, c;
        int myray[10];
        while (datainput[n])
        {
            if (datainput[n] == ('0') || datainput[n] == ('1') || datainput[n] == ('2') || datainput[n] == ('3') || datainput[n] == ('4') ||
                datainput[n] == ('5') || datainput[n] == ('6') || datainput[n] == ('7') || datainput[n] == ('8') || datainput[n] == ('9'))
            {
                str1 = datainput[n];
                str3 += str1;
            }
            else
            {
                c= stoi(str3);
                c >> myray[raycount];
                raycount++;
            }
            n++;
        }
        cout << myray[0] << endl;
        cout << myray[1] << endl;
        cout << myray[2] << endl;
        cout << myray[3] << endl;
        system("pause");
        return 0;
    }
    
    a un comportement non d√©fini une fois que 0600350991111001035062 a atteint la fin de la cha√ģne.
  • La mani√®re dont vous v√©rifiez les chiffres num√©riques peut √™tre grandement simplifi√©e √† l'aide de 0600350991111101035062, ou m√™me simplement par un simple contr√īle de plage √† l'aide des op√©rateurs 060035099111110106.

  • .
  • Vous ne comptabilisez pas correctement les num√©ros s√©par√©s par d'autres caract√®res ou lorsque le dernier num√©ro de la cha√ģne se trouve √† la toute fin de celle-ci.

  • La d√©claration while (datainput[n]) doit √™tre remplac√©e par n. Et vous ne rompez pas votre boucle si std::isdigit() atteint la capacit√© maximale de >=.

  • Vous ne r√©initialisez pas 0600350991111101035062 en une cha√ģne vide apr√®s l'avoir convertie avec 0600350991111101035062. Vous continuez simplement √† ajouter de nouveaux chiffres √† la fin des chiffres pr√©c√©dents sans interruption entre les num√©ros.

Cela dit, essayez plut√īt quelque chose de ce genre:

<=

démonstration en direct

Alternativement:

c >> myray[raycount];

démonstration en direct

    
0
2019-05-08 21: 43: 34Z
  1. Merci pour votre contribution! J'ai appliqu√© certaines des modifications que vous avez sugg√©r√©es et c'est un pas dans la bonne direction. Appr√©ciez √©galement beaucoup les autres m√©thodes qui faciliteront l‚Äôutilisation du code. R√©initialiser les cha√ģnes et le nombre entier semblait r√©soudre le probl√®me d'empilement, mais je suis toujours bloqu√© pour que tous les nombres soient empil√©s dans le tableau et pour la conversion de la cha√ģne en nombre. Je vais parcourir le code que vous avez post√© et voir si je peux r√©soudre davantage mon probl√®me. : -)
    2019-05-08 20: 06: 06Z
  2. @ Daniel, il serait utile que vous modifiiez votre question pour afficher la saisie que vous saisissez et le résultat attendu.
    2019-05-08 20: 09: 37Z
  3. J'ai ajouté 3 exemples, qui devraient produire le même résultat.
    2019-05-08 20: 39: 55Z
  4. @ Daniel J'ai mis à jour ma réponse. Il y avait une erreur dans mon premier exemple, que j'ai corrigé.
    2019-05-08 21: 38: 44Z

Vous souhaitez donc séparer les nombres et les caractères dans différents tableaux. Dans block, vous vérifiez les caractères, donc je suppose que stoi () ne fonctionnerait pas. Mieux vaut le transtyper en un entier.

myray[raycount] = c;

Ce way votre tableau temporaire contiendrait les nombres.

    
- 1
2019-05-08 16: 34: 59Z
  1. Je vous saurais gré de me dire pourquoi cette réponse a été rejetée. Merci.
    2019-05-13 08: 34: 19Z
raycount
source placée ici