OVH Cloud OVH Cloud

Decalage de chaine..

23 réponses
Avatar
Xavier
Bonjour,

Voila j'essaye de creer une petit fonction "basique" de cryptage qui renvoie
le decalage d'une chaine de caractére de 1 caractere dans une autre chaine
('A' remplacer par 'B'). Si je n'effectue pas de décalage c'est ok
"//*(szOut+i) =*(szIn+i)";
Si le décalage est effectué "*(szOut+i) = (char)(*(szIn+i)+1)" cela me
renvoie la chaine décalé+ symboles qui n'ont pas lieu d'étre apres..
Voila c'est sans doute trivial mais je suis débutant et si quelqu'un avait
la réponse (et une explication sur l'échec)...

Question bis: Comment faire pour ne pas avoir à déclarer la taille de la
chaine Result (// char Result[strlen(Chaine)] ne marche pas..)
Merci d'avance
Xavier

void test_DecalageChaine ()
{
char* Chaine="La Chaine";
char Result[9];
// char Result[strlen(Chaine)];
DecalageChaine(Result,Chaine);
cout << Result << endl;
}

void DecalageChaine (char* szOut, char* szIn)
{
int i=0;
do
{
//*(szOut+i) =*(szIn+i);
*(szOut+i) = (char)(*(szIn+i)+1);
}
while (szIn[i++] != '\0');
}

3 réponses

1 2 3
Avatar
Samuel Krempp
(03 May 2005 13:56,
Et ce n'est pas vraiment de l'optimisation prématurée


Voire...
Décider de mettre ++i partout dans un projet, je ne sais pas trop si
c'en est.


ah bon ? pour moi c'est clair, ce n'est pas de l'optimisation prématurée.
Choisir ++i comme "coding standard", c'est choisir la meilleure de 2 formes
souvent équivalentes, voilà tout.

comme a cité benoit, la forme "i++" est une "pessimisation prématurée", et
une obfuscation (la description de cet opérateur est plus compliquée), il
n'y a aucune raison de l'utiliser par défaut si ce n'est le poids d'une
(mauvaise, mais par le passé bénigne) habitude.

Dans les 2 autres cas que tu cites, tu laisses entendre qu'une fois une
forme utilisée dans un projet, ça devrait tenir lieu de règle.
Dans ce cas, c'est bien au début d'un projet qu'il faut choisir ++i, sans
notion d'optimisation, tout simplement parceque l'autre est une moins bonne
règle dans l'absolu (elle a des exceptions - des itérateurs compliqués,
utilisés dans une boucle cruciale. Et pour un nouveau venu, qqun qui n'a
pas assimilé 'i++' comme incrémentation standard, la forme suffixe est un
peu une obfuscation).

--
Sam


Avatar
kanze
Fabien LE LEZ wrote:
On Tue, 03 May 2005 09:30:04 +0200, (Benoît
Bréholée):

Bon, je veux bien admettre qu'un type pour lequel ++ est
défini est forcément copiable, et généralement sa copie ne
coûte pas trop cher. Je sais bien aussi qu'optimiser
prématurément est Mal.


Et ce n'est pas vraiment de l'optimisation prématurée


Voire...
Décider de mettre ++i partout dans un projet, je ne sais pas trop si
c'en est.
Décider de mettre ++i à un endroit parce qu'on l'a mis ailleurs, ce
n'en est pas, c'est juste suivre les règles du projet.
Décider de mettre ++i à un endroit alors qu'on a mis i++ ailleurs,
c'est de l'optimisation -- et de l'optimisation prématurée si la
décision de vient pas des résultats du profiler.


Excellente summarisation. Il ne manque d'un point :

-- Décider de mettre ++i à un endroit bien qu'on a mis des i++
partout ailleurs, c'est une optimisation prématurée.

(Ben, j'aurais un peu moins d'hésitations sur le premier point
aussi. Ce n'en est pas, et basta. Mais ça n'a pas vraiment
d'importance.)

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34



Avatar
kanze
Samuel Krempp wrote:
(03 May 2005 13:56,

Dans les 2 autres cas que tu cites, tu laisses entendre qu'une
fois une forme utilisée dans un projet, ça devrait tenir lieu
de règle.


Ce qui me semble tout à fait la politique à suivre.

Dans ce cas, c'est bien au début d'un projet qu'il faut
choisir ++i,


Pourquoi pas. Sauf que je n'ai pas de machine à remonter le
temps. Et le projet, ici, a commencé il y a plus de dix ans.

sans notion d'optimisation, tout simplement parce que l'autre
est une moins bonne règle dans l'absolu (elle a des exceptions
- des itérateurs compliqués, utilisés dans une boucle
cruciale. Et pour un nouveau venu, qqun qui n'a pas assimilé
'i++' comme incrémentation standard, la forme suffixe est un
peu une obfuscation).


Chez nous, on s'attend à ce que même les nouveaux venus
connaissent les deux formes. Mais évidemment, on n'embauche pas
de gens sans connaissance de C++ préalable.

Quant à « moins bonne règle dans l'absolu » (sans tenir compte
de l'optimisation), je te laisserai débattre le point avec
Kernighan et Richie (et Stroustrup, qui se servait de i++ à
l'époque aussi -- je ne sais pas ce qu'il fait maintenant). En
ce qui me concerne, en dehors de la question de performance, je
ne vois pas de différence.

--
James Kanze GABI Software
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34

1 2 3