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