Chaine de caractere

Résolu
Signaler
Messages postés
12
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
2 juillet 2008
-
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
-
bonjour,
voila mon probleme:
créer une fonction strbrk qui retire de str1 les caracteres contenus dans str2 et retourne le resultat.

voila le code que j'ai fait, mais le problem c'est qu'il me retourne les caracteres qui sont seulement a la meme place.

static void Main(string[] args)
        {
            Console.WriteLine("entrez un premier mot");
            string str1 = Console.ReadLine();
            Console.WriteLine("entez un deuxieme mot");
            string str2 = Console.ReadLine();
            string str3 = "";
            strpbrk(str1,str2,str3);

        }
        private static void strpbrk(string str1,string str2,string str3)
        {
            int i = 0;
            int j = 0;
           
           
            if (str1.Substring(j, 1) == str2.Substring(i, 1))
            {
                Console.WriteLine(str1[j]);
                i++;
                j++;
            }
            Console.ReadLine();

si qu'elqu'un peut m'aider je le remercie d'avance.

12 réponses

Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
65
Hello,

Perso, je le ferais comme ça :

private
static
string strpbrk(
string str1,
string str2)
{

   string result = str1;

   foreach (
char c
in str2)
   {
      result = result.Replace(c.ToString(),
"");
   }

   Console.ReadLine(); 

   return result;
}

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

Essaie avec str1.Contains(str2[i])

~~
Les trois lois de Codes-Sources :
Loi 1) Tu lis et respectes le reglement
Loi 2) Tu penses à valider si une reponse apportée à ton problème t'a aidé
Loi 3) Si tu ne respectes pas les 2 premières ....TU SORS !!
Messages postés
12
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
2 juillet 2008

excuse moi mais je suis debutant.


peut tu expliquer plus precisément.
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

Tu as une fonction qui existe en C# qui s'applique sur les string (ou les String, a verifier ... ) qui est la fonction Contains qui te renvoie vrai si le caractère en paramètre est contenu dans ta chaîne appelante.
http://msdn.microsoft.com/fr-fr/library/dy85x1sa(VS.80).aspx

~~
Les trois lois de Codes-Sources :
Loi 1) Tu lis et respectes le reglement
Loi 2) Tu penses à valider si une reponse apportée à ton problème t'a aidé
Loi 3) Si tu ne respectes pas les 2 premières ....TU SORS !!
Messages postés
12
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
2 juillet 2008

je vai essayé. je te remercie.


je vous dirai si ca fonctionne ou pas.
Messages postés
1160
Date d'inscription
vendredi 23 juillet 2004
Statut
Membre
Dernière intervention
21 octobre 2010
18
plus simplement, tu as la méthodes "IndexOfAny" (ou LastIndexOfAny) qui te donne l'indice ou trouver l'ensemble des occurences de ton "str2", et string.Remove, pour retirer X caractères de ta string.
Pour exemple :

string str1 = "totatita";
string str2 = "ta";
string str3

int[] ind = str1.LastIndexOfAny("ta");
foreach(int i in ind)
{
str3 = str1.Remove(i, 2);
}

//ici str3 devrait valoir toti
Messages postés
12
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
2 juillet 2008

merci, pour tout votreaide et pour tout le temp que vous m'avez accordé.
je vous tiens au courant de l'evolution des choses.
Et merci encore.
Messages postés
12
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
2 juillet 2008

la solution que m' a donné le prov ne fonctionne pas a moins que se soit moi qui est mal utilisé la fonction, ce qui est surement le cas donc je vous affiche ce que j'ai fait:

private static void strpbrk(string str1,string str2,string str3)
        {
            int[] ind = str1.IndexOfAny(str2);
            foreach (int i in ind)
            {
                str3 = str1.Remove(i, 2);
            }
            Console.ReadLine();
         }

2 erreurs me sont retournés:
- impossible de convertir string en char[]
- la méthode surchargé correspondant le mieux a 'string.IndexOfAny(char[])'possède des arguments non valides.

merci encore.
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
65
Petit problème d'espaces, il faut lire

private static string

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
12
Date d'inscription
jeudi 19 juin 2008
Statut
Membre
Dernière intervention
2 juillet 2008

merci SharpMao ca marche nikel!!!
je vous remercie tous pour votre aide.
Messages postés
1024
Date d'inscription
mardi 4 février 2003
Statut
Membre
Dernière intervention
7 juin 2010
65
De rien,

N'oublie pas de cocher les réponses utiles, ça peut servir à d'autres.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Salut,

A évaluer : il pourrait être bon de faire quelques benchs avec une forme de ce type :

private static string strpbrk(string str1, string str2)
{
  // TODO : vérification des entrées


  StringBuilder result = new StringBuilder(str1.Length);


  // Préparation de la liste des caractères invalides (tableau trié)
  Char[] invalidChars = str2.ToCharArray();
  Array.Sort<Char>(invalidChars);


  foreach (Char c in str1)
  {
    // Ajout à la sortie seulement si non trouvé
    if (Array.BinarySearch<Char>(invalidChars, c) < 0)
    {
      result.Append(c);
    }
  }


  return result.ToString();
}

En simple terme de temps d'execution elle devrait être un peu moins véloce sur un str2 court, mais dès que str2 grandit le surcout du tri devrait être amorti.
Côté mémoire ça devrait être mieux, on y va moins fort sur la création d'instances de String, donc gain appréciable sur des chaines longues pour str1.

/*
coq
MVP Visual C#
CoqBlog
*/