0
votes

Comment recherchez-moi deux tableaux de recherche de deux tableaux en C ++?

J'ai deux tableaux de type de données double - appelé Array1 [10] et Array2 [8]. Je suis obligé de rechercher Array2 Inside Array1 à chaque élément à l'aide d'une fonction de recherche linéaire. La déclaration de fonction est xxx pré>

si array2 est trouvée à l'intérieur de l'array1, j'ai besoin d'imprimer l'index de l'endroit où il se trouve dans Array1. Si ce n'est pas trouvé, j'ai besoin de la sortie pour être "na". Cette sortie doit être une chaîne de distribution délimitée. EG. P>

string linSearch (double array1[10], double array2[8])
{
    int index1 = 0;
    int index2 =0;
    int position =-1;
    bool found = false;
    while (index1<10 && !found && index2<8)
    {
        if array1[index1] == array2[index2])
        {
            found = true;
            position = index1;
        }
        index1++;
        index2++;
    }

    return position;

}


6 commentaires

La position est l'endroit où la deuxième matrice commence?


Aussi dans votre code actuel, vous revenez même si un seul numéro de Array2 est en tableau un


Non, la position consiste à enregistrer la position de la valeur de recherche et de la variable Index2 est l'endroit où le deuxième tableau commence.


@ N7C Affiche des exemples de tableaux lorsque l'on se trouve dans la seconde.


Veuillez ajouter des exemples d'entrée et d'exemple de sortie, il n'est pas clair que vous obtenez une sortie de 4 entrées ( 2, na, 6,7 ) des tableaux de taille 10 et 8


@ N7C Quel résultat sera pour les tableaux ont obtenu l'exemple {1} et {1, 1, 1}? L


3 Réponses :


1
votes
#include <iostream>
using namespace std;

string linSearch(double array1[10], double array2[8])
{

    string result = "";
    bool found;
    for (int j = 0; j < 8; j++)
    {
        if(j > 0)
            result.append(", ");

        found = false;
        for (int i = 0; i < 10; i++){
            if (array1[i] == array2[j]) {
                result.append(to_string(i));
                found = true;
            }
        }
        if(!found)
            result.append("NA");
    }
    return result;
}

int main(){

    double a1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    double a2[8] = {11, 25, 3, 41, 5, 6, 7, 8};
    cout << linSearch(a1, a2) << endl;
    return 0;
}

0 commentaires

1
votes

Vous ne cherchez pas un tableau à l'intérieur de l'autre. Vous recherchez des éléments d'un tableau dans un deuxième tableau. Si vous utilisez une recherche linéaire et si vous ne voulez pas trier la matrice, vous avez besoin de 2 boucles imbriquées pour le faire. Un pour chaque élément de la deuxième matrice et une pour trouver cet élément dans le premier tableau.

Gardez des choses simples et commencez à trouver la position d'un seul élément dans un tableau. Parce que vous comparez double s, vous ne devez pas les comparer avec == . Ensuite, vous avez juste besoin d'une fonction qui appelle la première pour chaque élément de la deuxième matrice: xxx

sortie: xxx


2 commentaires

Merci beaucoup pour ça. Malheureusement, comme condition d'attribution, nous ne sommes pas autorisés à utiliser des vecteurs


@ N7c c'est une pitié. Vous pouvez le prendre en tant qu'exercice pour refacturer le code pour remplacer d'abord les arguments vectoriels avec des itérateurs de début et d'extrémité, puis il ne s'agit que d'une petite étape pour passer des pointeurs sur le premier / dernier élément dans les tableaux. BTW s'il y a une telle exigence, vous devez le mentionner dans la question, car n'utilisez pas les vecteurs n'utilise essentiellement pas C ++



1
votes

Dans votre exemple de tableaux et la sortie attendue

2,NA,5,3,0,NA,NA,7


0 commentaires