0
votes

Le premier élément de tableau ne produira pas sans limite de chargement

L'affectation du programme nécessite un utilisateur de saisir des mots, puis de produire le "premier" et "dernier" élément (ordre lexical). Cependant, une fois que l'utilisateur saisit un mot de quatre lettres, le programme doit s'arrêter.

Je ne peux toujours pas le comprendre. :( Toute aide peut fournir serait grandement appréciée! P>

Voici l'exemple de sortie: sortie p>

voici le code: p>

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    string arrayString[20];
    int counter = 0, N = sizeof(arrayString) / sizeof(arrayString[0]);

    cout << "String of words with lexical order and char limit" << endl;
    cout << "\n";

    for (int i = 0; i < 20; i++) {
        cout << "Enter string: " << i + 1 << ": ";
        cin >> arrayString[i];

        if (arrayString[i].length() == 4) {
            break;
            counter++;
        }
    }

    sort(arrayString, arrayString + N);
    cout << "\nFirst: " << arrayString[0] << endl;
    cout << "Last: " << arrayString[N - 1] << endl;

    if (counter == 1) {
        cout << "\nInvalid! You entered a four-letter word" << endl;
    }

    cout << "\n";
    return 0;
}


3 commentaires

Pourquoi lire les mots dans un tableau? Vous avez juste besoin de std :: string s pour la première et dernière valeurs (lexographiquement) observées jusqu'à présent, que vous pouvez mettre à jour au fur et à mesure de votre nouvelle chaîne.


n a une valeur de 20, donc trier (arraystring, arraystring + n); trie 20 chaîne. Mais vous avez seulement entré 4 cordes.


C'est le même problème que la recherche des nombres minimum et maximum, mais avec des chaînes - vous n'avez pas besoin de stocker toutes les entrées et vous n'avez pas besoin de trier. (Le but de l'exercice est très probable que vous remariez cela.)


4 Réponses :


3
votes

n code> a une valeur de 20, donc trier (arraystring, arraystring + n); code> Trie 20 chaînes. Mais vous avez seulement entré 4 chaînes.

Vous devez utiliser compteur code> non n code>. P>

Vous devez donc corriger votre code afin que Compteur code> est calculé correctement, comme celui-ci p> xxx pré>

puis utilisez compteur code> au lieu de n code> quand vous triez et imprimer les résultats. P>

sort(arrayString, arrayString + counter);
cout << "\nFirst: " << arrayString[0] << endl;
cout << "Last: " << arrayString[counter - 1] << endl;


2 commentaires

"Vous devez utiliser le comptoir non n." - c'est i qui compte (qui devra être déplacé vers la portée de la fonction), pas compteur (qui doit être incrémenté avant que le casse pour s'acquitter de son utilisation apparemment destinée à indiquer si un mot de quatre lettres a été rencontré).


@Tonydelroy Je n'ai pas initialement remarqué le problème avec compteur . C'est corrigé maintenant.



1
votes

Je vous suggère de supprimer n = sizeof (arraystring) / sizeof (arraystring [0]); code>.

aussi, p>

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    string arrayString[20];
    int counter = 0;

    cout << "String of words with lexical order and char limit" << endl;
    cout << "\n";

    for (int i = 0; i < 20; i++) {
        cout << "Enter string: " << i + 1 << ": ";
        cin >> arrayString[i];
        if (arrayString[i].length() == 4) {
            counter++;
            cout<<"\nInvalid! You entered a four-letter word" << endl;
            break;
        }
        counter++;
    }

    sort(arrayString, arrayString + counter); 
    cout << "\nFirst: " << arrayString[0] << endl;
    cout << "Last: " << arrayString[counter - 1] << endl;

    cout << "\n";
    return 0;
}


0 commentaires

0
votes

Comme vous avez rempli moins que N Strings dans votre matrice lorsque vous les triez, la première chaîne est vide.

Le correctif est de mettre à jour n avec le numéro des chaînes entrées: xxx

note compteur ++ est déplacé avant la pause sinon, sinon elle n'exécutera pas.

Ceci serait plus simple avec std :: vecteur : xxx


0 commentaires

1
votes

Vous avez surchargé le problème. Vous n'avez pas besoin de stocker toutes les cordes et de les trier. Vous pouvez comparer l'entrée avec la valeur MIN et MAX actuelle et le remplacer si nécessaire.

#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    string arrayString[2];
    int counter = 0;

    cout << "String of words with lexical order and char limit" << endl;
    cout << "\n";

    for (int i = 0; i < 20; ++i) {
        cout << "Enter string: " << i + 1 << ": ";
        std::string input;
        cin >> input;

        if (i == 0) {
            arrayString[0] = input;
            arrayString[1] = input;
        } else {
            arrayString[0] = std::min(input, arrayString[0]);
            arrayString[1] = std::max(input, arrayString[0]);
        }

        if (input.length() == 4) {
            counter = 1;
            break;
        }
    }

    cout << "\nFirst: " << arrayString[0] << endl;
    cout << "Last: " << arrayString[1] << endl;

    if (counter == 1) {
        cout << "\nInvalid! You entered a four-letter word" << endl;
    }

    cout << "\n";
    return 0;
}


0 commentaires