Exemplo n.º 1
0
 public LetterTracker()
 {
     orderedLetters = new OrderedLetter[LETTER_COUNT];
     for (var i = 0; i < LETTER_COUNT; ++i)
     {
         orderedLetters[i] = new OrderedLetter();
     }
 }
Exemplo n.º 2
0
        public static List <int> PrintFirstNRE(StreamReader sr)
        {
            if (sr == null)
            {
                throw new ArgumentNullException("Parameter StreamReader sr is null.");
            }

            //// Debug to see what we got in that thar stream
            //while (sr.EndOfStream == false)
            //{
            //    Console.WriteLine(Convert.ToChar(sr.Read()));
            //}


            var letterTracker = new OrderedLetter[LETTER_COUNT];

            for (var i = 0; i < LETTER_COUNT; ++i)
            {
                letterTracker[i] = new OrderedLetter();
            }

            //var letters = new LetterTracker();
            // "cannot assign to letter because it is a foreach iteration variable"
            //foreach (var letter in letters)
            //{
            //    letter = new orderedletter();
            //}

            var firstNREList = new List <int>();



            // No. If stream is empty this will fail:
            //var currFirstNRE = sr.Read();
            // Either use a single Read() inside the end check of the while loop
            // Or add protection out here
            // (Fixed with the former)


            //ValidateLetter(currFirstNRE);
            //letters.SeeLetter(currFirstNRE);
            //firstNREList.Add(currFirstNRE);

            while (sr.EndOfStream == false)
            {
                var currLetter = sr.Read();
                Console.WriteLine($"Reading '{Convert.ToChar(currLetter)}' from stream.");
                ValidateLetter(currLetter);
                letterTracker[currLetter - 'a'].LogAsRead();

                var currFirstNRE = FindCurrentFirstNRE(letterTracker);
                firstNREList.Add(currFirstNRE);

                if (currFirstNRE == NO_NRE)
                {
                    Console.WriteLine($"No non-repeating letters. {NO_NRE}");
                }
                else
                {
                    Console.WriteLine($"First non-repeating letter so far is: {Convert.ToChar(currFirstNRE)}");
                }
            }

            // Fixup for if there were no letters in the stream at all
            if (firstNREList.Count == 0)
            {
                Console.WriteLine(
                    $"No letters found in stream.\n" +
                    $"No non-repeating letters. {NO_NRE}");
                firstNREList.Add(NO_NRE);
            }

            return(firstNREList);
        }