Exemple:
string str = "I am going to reverse myself."; string strrev = ""; foreach (var word in str.Split(' ')) { string temp = ""; foreach (var ch in word.ToCharArray()) { temp = ch + temp; } strrev = strrev + temp + ""; } Console.WriteLine(strrev); //I ma gniog ot esrever .flesym
9 Réponses :
Vous pouvez utiliser linq comme
cela remplacerait l'intérieur de pourcheach Oui. strev + = "" + mot.Reverse (); puis retirez le premier espace du drever.
String.Reverse va inverser toute la chaîne en place et pas chaque mot.
@mcabral - désolé. Édité ma réponse pour le rendre plus explicite. Je ne voulais pas postuler d'inverse sur une ficelle entière avant de la fractionnement.
@mcabral String est immuable. Donc, il ne peut pas inverser la chaîne en place i>. @Sachin string.Reverse () code> n'existe pas. L'inverse n'est qu'une méthode d'extension de Linq qui retournera un
iEnumerable inversé
Eh bien, voici une solution LINQ: Si vous utilisez .NET 3.5, vous devez convertir la séquence inversée en une matrice également: P> Notez que cette façon d'inverser une chaîne est quelque peu encombrante. Il est facile de créer une méthode d'extension pour le faire: p> Notez que c'est toujours em> "faux" de différentes manières - il ne fait pas gérer Avec combinaison caractères, paires de substituts, etc. Il inverse simplement la séquence des unités de code UTF-16 dans la chaîne d'origine. Bien pour jouer, mais vous devez comprendre pourquoi ce n'est pas une bonne idée de l'utiliser pour des données réelles. P> P>// Don't just call it Reverse as otherwise it conflicts with the LINQ version.
public static string ReverseText(this string text)
{
char[] chars = text.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
(char []) code> constructeur li>
toarray () code> sur la séquence de chaîne, car .NET 4 a plus de surcharges disponibles li>
string.join code> sur le résultat pour remettre les mots inversés à nouveau ensemble. LI>
ul>
Est-ce que la collision avec énumérable.Reverse code> vraiment un problème / indésirable? Votre fonction remplit le contrat pour
énumérable.Reverse code> aussi, à part Exécution différée. Et puisque
String code> est immuable et déjà évalué, l'exécution différée n'est pasobservable. Est-ce parce qu'une version de cette fonction traite des problèmes d'unicode ne remplirait pas le contrat de
énumérable.Reverse code>?
@CODEINCHAOS: Non, c'est parce que ce n'est pas immédiatement évident quelle version du code va être appelée. Vous pouvez vous retrouver avec des situations impaires en raison d'avoir en utilisant des directives code> à différents niveaux de nidification, par exemple. Il est encore plus difficile de suivre la résolution normale de la surcharge :)
Pour inverser une chaîne I Utilisateur:
string s="AB CD"; string reversed = String.Join(" ", s.Split(' ') .Select(word => new String( word.Reverse().ToArray() ) ));
Pourquoi je ne suis pas capable de trouver string.Reverse () code>?
@Javed il n'y a pas de string.Reverse () code>. Il n'y a que le
énumérable.Reverse () code> méthode d'extension. Cela nécessite un
à l'aide de System.Linq; code> dans votre fichier de code.
Pourriez-vous ajouter ce manquant en utilisant code> à votre réponse?
@Rolandillig pourquoi? Ils indiquent clairement "la fonction inverse () fait partie de LINQ".
1 - PROCÉDÉ D'EXTENSION Pour inverser une chaîne
public static string reverseText(this string description) { string [] reversetext= description.Split(' ').Select(i => i.ToString().reverseString()).Reverse().ToArray(); return string.Join(" ", reversetext); }
J'ai utilisé Xor pour échanger par ici http://en.wikipedia.org/wiki/xor_swap_algorithm a> le c # est: p>
//Without Extension Methods Like: Split, ToCharArray, etc.. public string ReverseString(string str="Hai How Are You?"){ var FullRev="", var wordRev=""; for(i=0;i<=str.length;i++){ if(str[i]==" " || i==str.length){ FullRev=FullRev+" "+wordRev; //FullRev=wordRev+" "+FullRev; wordRev=""; }else{ wordRev=str[i]+wordRev; } } return FullRev; } //Result "iaH woH erA ?uoY"
public static void ReverseEachWordString(string abc) { int start_index = 0, end_index = abc.Length - 1; int i = 0, j = 0; char[] arr = abc.ToCharArray(); try { while (start_index < end_index) { if (arr[start_index] == ' ') { Console.WriteLine(arr[start_index]); start_index++; i = start_index; } else { if (arr[i] != ' ') { if (i == end_index) { i++; for (j = i - 1; j >= start_index; j--) { Console.WriteLine(arr[j]); } break; } else i++; } else { for (j = i - 1; j >= start_index; j--) { Console.WriteLine(arr[j]); } i++; start_index = i - 1; } } } } catch (Exception ex) { ex.Message.ToString(); } }
Pourriez-vous s'il vous plaît ajouter une explication à cela.
En outre, la question a dit " mais j'ai besoin facile / brève façon i>" - mais cela est plus long et n'a pas l'air plus facile que ce qu'ils avaient déjà.
Vous avalez également toutes les exceptions - c'est mauvais comme s'il existe des problèmes que l'appelant n'a aucun moyen de savoir.
static void Main(string[] args) { string str = "Hi how are you"; char[] char_arr= str.ToCharArray(); string finalstr = ""; string eachwords = ""; string tempreverseword = ""; int char_length = char_arr.Length; for (int i = 0; i < char_arr.Length; i++) { if (char_arr[i].ToString() == " " || i == char_length-1) { if (i == char_length - 1) { eachwords += char_arr[i] + ""; } char[] revchar_arr = eachwords.ToCharArray(); for (int j = revchar_arr.Length-1; j >=0; j--) { tempreverseword += revchar_arr[j]; } finalstr += tempreverseword+" "; tempreverseword = ""; eachwords = ""; } else { eachwords += char_arr[i] + ""; } } Console.WriteLine(finalstr); Console.ReadKey(); }
Bien que votre code a l'air très cool, nous aimons aussi ici qu'une phrase ou deux pour l'initier. Comme peut-être pourquoi c'est mieux. Je vous invite à lire ce guide: "Comment j'écris une bonne réponse" ici: Stackoverflow.com/help/how-to- Répondre
Le code n'a pas l'air "très cool" du tout. Il utilise beaucoup trop de variables et avait une performance terrible.
string str = "I am going to reverse myself."; string[] strArray = str.Split(' '); string[] strArrayReversed = new string[strArray.Length]; for(int i = 0; i < strArray.Length; i++) { char[] eachWordLetter = strArray[i].ToCharArray(); Array.Reverse(eachWordLetter); strArrayReversed[i] = new string(eachWordLetter); } string newReversedString = String.Join(" ", strArrayReversed); Console.WriteLine(newReversedString); Console.ReadLine();