0
votes

Trouver le mot le plus long (et l'écrire) dans la chaîne sans scission, distincte et pourache

J'ai une mission de faire une méthode pour trouver le mot le plus long dans une chaîne sans scission, distincts et pourach.

J'ai pu diviser les mots et compter la longueur mais je suis coincé sur comment puis-je réellement comparer et écrivez-les. xxx

La sortie à l'heure actuelle ressemble maintenant à ceci: xxx

Je suis sûr que je serais sûr que je serais capable d'obtenir uniquement le nombre le plus long à afficher en comparant Compt avant de réinitialiser avec Temp Int, mais comment écrire le mot avec elle.

ou s'il y a un moyen plus facile qui probablement est.


3 commentaires

Qu'en est-il de Regex ou voulez-vous l'éviter aussi? Cela ferait beaucoup de choses plus simples.


Est-ce que cela répond à votre question? trouver le mot le plus long dans la chaîne


@Twey Tent a réellement la dernière réponse, il a aidé beaucoup (d'autres sont divisés, foresach and regex que nous n'avons pas parlé de ce que nous savons maintenant si je peux l'utiliser). Merci!


3 Réponses :


1
votes

Vous êtes déjà de bonne manière. Au lieu d'imprimer directement les mots, conservez la longueur et la position du mot le plus long et imprimez-la à la fin. Comme:

static void longestWord(String s1)
{
    char emp = ' ';

    int longestLength = 0;
    int longestStart = 0;

    int currentStart = 0;

    for (int i = 0; i < s1.Length; i++)
    {
        if (s1[i] == emp || s1[i] == '.')
        {
            // calculate the current word length
            int currentLength = i - currentStart;

            // test if this is longer than the currently longest
            if(currentLength > longestLength)
            {
                longestLength = currentLength;
                longestStart = currentStart;
            }

            // a new word starts at the next character
            currentStart = i + 1;                     
        }
    }

    // print the longest word
    Console.WriteLine($"Longest word has length {longestLength}: \"{s1.Substring(longestStart, longestLength)}\"");
}


1 commentaires

C'est génial, j'essayais de le rendre charer et de la scinder / l'écrire de cette façon, mais c'est beaucoup plus facile. Merci!



1
votes

2 commentaires

Nous n'avons pas parlé de regex, mais je semble que cela facilite beaucoup plus facilement les choses (l'a vu utiliser beaucoup) afin que je vais y examiner. Merci!


@Sukonbu Je suppose que le point de votre exercice était de travailler à travers un algorithme plutôt que de compter sur les bibliothèques. Si tel est bien le cas, vous seriez mieux avec d'autres solutions proposées. Je ferai cependant souligner que la version LINQ n'effectue pas explicitement scindée, distincte ou pourrespirance en soi (bien que cela repose certainement sur iEnumerable), vous pourriez donc être capable de le remettre.



1
votes

Vous pouvez stocker pour chaque mot les caractères de la nouvelle liste de caractères (liste de la longueur dynamique) Et si le nouveau mot est plus long du mot précédent le convertit en chaîne. Si vous avez deux mots de même longueur, cela prendra le premier. Si vous voulez le dernier changement, le "Maxlength XXX


1 commentaires

Havent a pensé à utiliser la liste <> Je vais y regarder, merci!