[.NET VC++] ou exclusif entre deux String
Bonjour, je cherche � crypter un String (ou exclusif avec une autre String).
A une fonction je passe la String � crypter, cette fonction ferait les op�rations suivantes :
1- elle scrute les caract�res un par un (du d�but � la fin)
2- manipule CE caract�re (ou exclusif avec un autre caract�re)
3- le remplace par le r�sultat ci-dessus
4- renvoi la cha�ne � la fin de la scrutation
Par exemple :
Code:
1 2 3 4 5 6 7 8 9
|
private: String* CrypteDecrypte(String* pstring_)
{
String* pstring_Retour = pstring_;
for( int i=0 ; i<pstring_Retour->Length ; i++ )
pstring_Retour[i] = pstring_Retour[i] (ou exclusif) '#'
return pstring_Retour;
} |
Je me heurte � �a :
1- je ne pense par pouvoir manipuler cacart�re par caract�re dans la String,
2- transformer la String initiale en tableau de caract�re
2-1- effectuer la succession de ou exclusifs
2-2- re-transformer le tableau de caract�res obtenu en String
2-3- renvoyer cette String
Existe-t-il plus pratique ?
Merci
le compilo n'aime pas mes [] alors
Bon, j'ai cod� la fonction comme suit :
Code:
1 2 3 4 5 6
|
private: void CrypteDecrypte(String& pstring_)
{
for( int i=0 ; i<pstring_.Length ; i++ )
pstring_[i] = pstring_[i] ^ '#';
} |
Et l'erreur de compilation est :
Code:
1 2 3
|
error C2676: '[' : 'System::String' binaire ne définit pas cet opérateur ou une conversion vers un type acceptable pour l'opérateur prédéfini
error C2676: '[' : 'System::String' binaire ne définit pas cet opérateur ou une conversion vers un type acceptable pour l'opérateur prédéfini |
J'en d�duis qu'il n'appr�cie pas les [] ?
�a y est : StringBuilder de System::Text
�a y est, dans le livre VisualC++.NET �tape par �tape Microsotf Press page 42 :
- une String n'est pas modifiable APRES son initialisation
- utiliser une StringBuilder de System::Text pour des cha�nes devant �tre souvent modifi�es
Alors voila ce que j'ai fait ET qui fonctionne � merveille c'est � dire comme je le veux :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
private: String* CrypteDecrypte(String* pstring_)
{
StringBuilder* pstringbuilder_Retour = new StringBuilder(pstring_);
StringBuilder* pstring_Key = new StringBuilder(S"ma clef de cryptage");
for( int i=0 ; i<pstringbuilder_Retour->Length ; i++ )
pstringbuilder_Retour->set_Chars(i, pstringbuilder_Retour->get_Chars(i) ^ pstring_Key->get_Chars(i%(pstring_Key->Length)));
return pstringbuilder_Retour->ToString();
} |
avec bien �videmment :
Code:
1 2
|
using namespace System::Text; |