9
votes

Moyen facile d'inverser chaque mot dans une phrase

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


0 commentaires

9 Réponses :


0
votes

Vous pouvez utiliser linq comme xxx


4 commentaires

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 . @Sachin string.Reverse () n'existe pas. L'inverse n'est qu'une méthode d'extension de Linq qui retournera un iEnumerable inversé .



17
votes

Eh bien, voici une solution LINQ: xxx pré>

Si vous utilisez .NET 3.5, vous devez convertir la séquence inversée en une matrice également: 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);
}
  • Split sur les espaces li>
  • Pour chaque mot, créez un nouveau mot en traitant l'entrée en tant que séquence de caractères, inversez cette séquence, tournez le résultat dans un tableau, puis appelez la chaîne (char []) code> constructeur li>
  • en fonction de la version-cadre, appelez toarray () code> sur la séquence de chaîne, car .NET 4 a plus de surcharges disponibles li>
  • appelez string.join code> sur le résultat pour remettre les mots inversés à nouveau ensemble. LI> ul>

    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> xxx pré>

    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>


2 commentaires

Est-ce que la collision avec énumérable.Reverse vraiment un problème / indésirable? Votre fonction remplit le contrat pour énumérable.Reverse aussi, à part Exécution différée. Et puisque String 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 ?


@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 à différents niveaux de nidification, par exemple. Il est encore plus difficile de suivre la résolution normale de la surcharge :)



5
votes

Pour inverser une chaîne I Utilisateur:

string s="AB CD";
string reversed = String.Join(" ",
    s.Split(' ')
     .Select(word => new String( word.Reverse().ToArray() ) ));


4 commentaires

Pourquoi je ne suis pas capable de trouver string.Reverse () ?


@Javed il n'y a pas de string.Reverse () . Il n'y a que le énumérable.Reverse () méthode d'extension. Cela nécessite un à l'aide de System.Linq; dans votre fichier de code.


Pourriez-vous ajouter ce manquant en utilisant à votre réponse?


@Rolandillig pourquoi? Ils indiquent clairement "la fonction inverse () fait partie de LINQ".



0
votes

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);
    }


0 commentaires


0
votes
//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"

0 commentaires

-3
votes
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();
            }
        }       

3 commentaires

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 " - 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.




-2
votes
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();

0 commentaires