krim43
Messages postés12Date d'inscriptionjeudi 19 juin 2008StatutMembreDernière intervention 2 juillet 2008
-
30 juin 2008 à 16:09
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
5 juil. 2008 à 16:56
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;
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008 30 juin 2008 à 16:27
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 !!
Liverion
Messages postés296Date d'inscriptionmardi 22 avril 2008StatutMembreDernière intervention18 août 2008 30 juin 2008 à 16:34
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 !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 30 juin 2008 à 16:44
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 :
krim43
Messages postés12Date d'inscriptionjeudi 19 juin 2008StatutMembreDernière intervention 2 juillet 2008 1 juil. 2008 à 08:49
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.
cs_coq
Messages postés6350Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 5 juil. 2008 à 16:56
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.