2017-07-29 4 views
0

Le titre donne la plupart des détails. button1_Click est appelée lorsque button1 est appuyé par l'utilisateur. outputBox ne contient pas de texte même si je mets un mot tel que "sûrement" (qui ajoute jusqu'à 100 sur la base des index des caractères) en inputBox.Ce code C# qui vérifie l'index de chaque lettre d'un mot dans l'alphabet, puis sort si les lettres ajoutent jusqu'à 100, ne produit pas du tout

Ce code me semble également inefficace à cause de la boucle. S'il y a un moyen de supprimer la boucle char, s'il vous plaît dites-moi ce que c'est, car je suis un débutant à C#. Il y a probablement une sorte de méthode Regex que je ne connais pas.

private void button1_Click(object sender, EventArgs e) 
    { 
     string alphabet = "abcdefghijklmnopqrstuvwxyz"; 
     string[] s = inputBox.Text.Split('\n'); 
     int i = 0; 
     foreach (string u in s) 
     { 
      foreach (char c in u.ToCharArray()) 
      { 
       int index = Array.IndexOf(alphabet.ToCharArray(), c); 
       i += index; 
      } 
      if (i == 100) 
      { 
       outputBox.Text += u; 
       outputBox.Text += Environment.NewLine; 
      } 
     } 
    } 
+0

Pour pourquoi il ne l'affichage résultat pour le mot que vous entrez, vous devez déboguer et vérifier si le code suit la logique et pourquoi il ne fait pas la somme de 100. –

+0

L'index des tableaux dans C# est basé sur 0, donc 'Array.IndexOf (alphabet.ToCharArray(), 'a') 'retournerait 0, et les lettres de" sûrement "ajouteraient jusqu'à 94 - 6 moins de 100, 1 moins pour chaque lettre dans" sûrement ". – Poosh

+0

Merci. J'ai oublié cela. Cela a réglé le problème, cependant. – snorepion

Répondre

0

i ont ajouté cette logique pour vous d'apprendre une autre logique qui pourrait être plus rapide dans l'exécution, l'essayer et tester:

string inputText; 
List<char> alphabet; 
int i, foundIndex, lastNewLineIndex; 

// List is an array holder with a lot of ease operations (check online for good practice) 
alphabet = new List<char>("abcdefghijklmnopqrstuvwxyz".ToCharArray()); 

// sort characters and its required for Binary Search Algorithm 
alphabet.Sort(); 

inputText = inputBox.Text.Trim(); 
i = 0; 
lastNewLineIndex = 0; 
for (int charIndex = 0; charIndex < inputText.Length; charIndex++) 
{ 
    // New Line Char 
    if (inputText[charIndex] == '\n') 
    { 
     lastNewLineIndex = charIndex + 1; 
     // Skip below code and go to next loop index 
     continue; 
    } 

    // Binary Search is a fast searching algorithm used in case of sorted data with speed O(log(n)) 
    foundIndex = alphabet.BinarySearch(inputText[charIndex]); 

    // Skip in case of not found 
    if (foundIndex < 0) continue; 

    i += foundIndex; 

    if (i >= 100) 
    { 
     int length; 

     // Get the index of right \n starting from foundIndex 
     length = inputText.IndexOf('\n', foundIndex); 

     // in case of text ending with no \n after foundIndex 
     if (length < 0) length = inputText.Length - lastNewLineIndex; 

     // Chars length between left \n and right \n 
     else length = length - lastNewLineIndex; 


     // Get the Text Between left \n and right \n and add \n at the end 
     outputBox.Text += inputText.Substring(lastNewLineIndex, length) + Environment.NewLine; 
     // Exit Loop 
     break; 
    } 
} 
+0

Vous n'avez pas besoin de trier l'alphabet car il est déjà trié. – ckuri

+0

Aussi ToCharArray n'est pas nécessaire car Liste accepte IEnumerable en tant qu'argument de constructeur et chaîne implémente IEnumerable . – ckuri

+0

Merci pour les notes :) –