Rechercher : dans
Par :

Vérifier si une chaîne en contient une autre

Dernière réponse le 9 avr 2009 à 12:12:38 Evil Jajuka, le 12 fév 2009 à 04:59:16 
 Signaler ce message aux modérateurs

Bonjour,

Voila j'ai un problème avec l'un des exercices que je doit faire. Je met l'énoncé pour faire plus simple :

Écrivez une méthode qui prend en paramètre deux chaînes de caractères et qui retourne true si la deuxième
chaîne se retrouve complètement dans la première mais sans nécessairement que les caractères s'y
retrouvent de façon consécutive. Exemple : La méthode appliquée à
"Le manteau est en vison" et "maison" retournera true,
"Rien ne sert de courir, il faut partir à point" et "Rester" retournera true
"Plus on mange, moins on a faim" et "repas" retournera false.

Voici le code que j'ai écrit :

static boolean contient(String msg, String msg2)
{
        boolean contient = false;
        for (int i = 0; i < msg2.length() - 1; i++) 
        {
            if (msg.indexOf(msg2.charAt(0)) != -1)
           {
                if (msg.indexOf(msg2.charAt(i)) < msg.indexOf(msg2.charAt(i + 1)))
                {
                    contient = true;
                }
            }
        }
        return contient;
}


Le problème c'est que ma chaîne me renvoie toujours true, sauf lorsque le premier caractère de la deuxième chaine ne fait pas parti de la première chaîne. Si quelqu'un pourrait m'aider.

Merci

Meilleures réponses pour « Vérifier si une chaîne en contient une autre » dans :
Comment vérifier si mon antivirus est actif ? VoirLe test Si vous avez des doutes sur le fait que votre antivirus soit actif, il vous suffit de télécharger le fichier suivant: http://www.eicar.org/download/eicar_com.zip Si votre antivirus bloque le téléchargement et vous affiche une alerte,...
[Linux] Activer l'Ultra DMA sur un disque dur IDE Voirhdparm Principe Comment se le procurer Mise en oeuvre Connaître les informations concernant vos disques dur IDE Vérifier si l'Ultra DMA est activé Activer l'Ultra DMA Désactiver l'Ultra DMA Mesurer la performance de vos...
Télécharger Atomic Mail Verifier VoirLa vérification de la validité d’une adresse email par les programmes spécialisés est souvent limitée à la vérification de l’adresse SMTP. Atomic Mail Verifier est un programme avancé dans la vérification des adresses mails non valides....
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...

1

Evil Jajuka, le 12 fév 2009 à 05:00:34

Désolé, j'ai oublier de spécifier que le code est en Java...

Répondre à Evil Jajuka

2

Psyk974, le 12 fév 2009 à 05:25:36

Salut,

Bon je m'y connais pas trop en JAVA mais je te donne ça quand même à essayer. S'il y a des erreurs de syntaxe je te laisse le soin de corriger :)

static boolean contient(String msg, String msg2)
{
        boolean contenu_dans = true;
	boolean trouve_lettre = false;
	int j = 0;
        for (int i = 0; i < msg2.length() - 1; i++) 
        {
			j = 0;
			trouve_lettre = false;
			for (int j = 0; j < msg.length() - 1; j++) 
			{
				if (msg2.charAt(i) == msg.charAt(j))
				{
				    trouve_lettre = true;
				}
			}
			if (trouve_lettre == false)
			{
				contenu_dans = false;
			}
        }
        return contenu_dans;
}


Psyk

Répondre à Psyk974

3

Evil Jajuka, le 12 fév 2009 à 05:42:48

Merci pour l'aide, mais le code que tu m'a donné retourne true même si les caractères se retrouve dans la chaîne dans un ordre quelconque, mais il faudrait qu'il retourne true seulement si les lettres sont dans le bon ordre.

Exemple :
"Le manteau est en vison" et "maison" retournera true,
"Le manteau est en vison" et "nosiv" retournera false (nosiv = vison à l'envers)

Répondre à Evil Jajuka

4

Psyk974, le 12 fév 2009 à 06:18:14

Ahhh ok mais j'avais pas compris qu'il fallait que les lettres soient dans l'ordre.
Je regarde ce que je peux faire et je te tiens au courant
Psyk

Répondre à Psyk974

5

Psyk974, le 12 fév 2009 à 06:28:24

Essaye ça et oublie toujours pas de corriger mes erreurs éventuelles de syntaxes lol


static boolean contient(String msg, String msg2)
{
    boolean contenu_dans = true;
	boolean trouve_lettre = false;
	int j = 0;
	int dernier_index = -1;
        for (int i = 0; i < msg2.length() - 1; i++) 
        {
			j = 0;
			trouve_lettre = false;
			for (int j = 0; j < msg.length() - 1; j++) 
			{
				if (msg2.charAt(i) == msg.charAt(j))
				{
				    if (j > dernier_index) {
				    trouve_lettre = true;
					dernier_index = j;
					}
				}
			}
			if (trouve_lettre == false)
			{
				contenu_dans = false;
			}
        }
        return contenu_dans;
}

Psyk

Répondre à Psyk974

6

Psyk974, le 12 fév 2009 à 09:38:09

static boolean contient(String msg, String msg2)
{
    boolean contenu_dans = true;
	boolean trouve_lettre = false;
	int j = 0;
	int dernier_index = -1;
        for (int i = 0; i < msg2.length() - 1; i++) 
        {
			j = 0;
			trouve_lettre = false;
			for (int j = 0; j < msg.length() - 1; j++) 
			{
				if (msg2.charAt(i) == msg.charAt(j))
				{
				    if (j > dernier_index) {
				        trouve_lettre = true;
					dernier_index = j;
                                        break;
			            }
				}
			}
			if (trouve_lettre == false)
			{
				contenu_dans = false;
			}
        }
        return contenu_dans;
}


Rajouter un break dans la deuxième boucle et ça marche ! Excuse moi
Psyk

Répondre à Psyk974

7

Evil Jajuka, le 12 fév 2009 à 16:24:01

Merci Psyk974, ça marche parfaitement :)

Répondre à Evil Jajuka

8

Psyk974, le 13 fév 2009 à 03:58:01

Ok cool, met un résolu alors :)
Psyk

Répondre à Psyk974

9

cedricpah, le 27 mar 2009 à 13:54:49

Il y a beaucoup plus simple !
substr_count("chaine","chainerecherchee") renvoie le nombre d'occurrence de la chaine recherchée...

Répondre à cedricpah

10

 cedricpah, le 9 avr 2009 à 12:12:38

Oups, je parlais pour php...

Répondre à cedricpah
Collection CommentÇaMarche.net