C# finding the shortest and longest word in a array

后端 未结 8 1244
小蘑菇
小蘑菇 2021-01-15 04:32

I am trying to find the shortest and longest string value based on length and im getting stuck. As of now the script exits after the writeline. I think the code needs some h

相关标签:
8条回答
  • 2021-01-15 04:59

    Here's a generic extension method you can use (efficiency O(n)):

    public static class Extensions{
        // assumes that supply a Func<T, int> that will return an int to compare by
        public static Tuple<T, T> MaxMin<T>(this IEnumerable<T> sequence, Func<T, int> propertyAccessor){
            int min = int.MaxValue;
            int max = int.MinValue;
    
            T maxItem = default(T);
            T minItem = default(T);
    
            foreach (var i in sequence)
            {
                var propertyValue = propertyAccessor(i);
                if (propertyValue > max){
                    max = propertyValue;
                    maxItem = i;
                }
    
                if (propertyValue < min){
                    min = propertyValue;
                    minItem = i;
                }                       
            }
    
            return Tuple.Create(maxItem, minItem);
    }
    
    // max will be stored in first, min in second
    var maxMin = word.MaxMin(s => s.Length);
    
    0 讨论(0)
  • 2021-01-15 05:03
    string[] word = new string[5];
    for (int i = 0; i <= word.Length; i++)
    {
    
        Console.WriteLine("Type in a word");
        word[i] = Console.ReadLine();
    }
    int min = word[0].Length;
    int max = word[0].Length;
    string maxx = "";
    string minn = "";
    for (int i = 0; i <= word.Length; i++)
    {
        int length = word[i].Length;
        if (length > max)
        {
            maxx = word[i];
        }
        if (length < min)
        {
            minn = word[i];
            Console.Write("Longest");
        }
    }
    Console.Write("Shortest:" + maxx);
    Console.Write("Longest" + minn);
    Console.ReadKey(true);
    
    0 讨论(0)
  • 2021-01-15 05:05

    Your for loop condition is always false. i starts at 5 and you are checking for it to be less than 0... This is always false so the loop never starts.

    And if that is just a typo, you are also putting the input into names[i] instead of word[i], and names[i] is never used again...

    0 讨论(0)
  • 2021-01-15 05:06

    try this

        static void Main(string[] args)
        {
            string[] array1 = { "Cats and ratsasdfasdf", "just rats and the just catest", "rats" };
            var shortString = array1[0];
            var longString = array1[0];
    
            /*Code for Find Shortest and longest string in Array*/
            foreach (var t in array1)
            {
                if (shortString.Length > t.Length)
                    shortString = t;
                if (longString.Length < t.Length)
                    longString = t;
            }
            Console.WriteLine("shortest string is:" + shortString);
            Console.WriteLine("Longest string is:" + longString);
            Console.Read();
        }
    
    0 讨论(0)
  • 2021-01-15 05:07

    As @DStanley and @RenniePet pointed out, your original code doesn't exactly do what you're trying to accomplish. I do believe you wanted to cycle through the member of your string array and fill them with console inputs. A working code would look like this:

        string[] word = new string[5];
    
            for (int i = 0; i < word.Length; i++)
            {
                Console.Write("Input text: ");
                word[i] = Console.ReadLine();
            }
    
            List<string> _sortedWords = word.ToList<string>();
            _sortedWords.Sort((x, y) => x.Length.CompareTo(y.Length));
    
            Console.WriteLine("Smaller: " + _sortedWords[0]);
            Console.WriteLine("Larget: " + _sortedWords[_sortedWords.Count-1]);
    
            Console.ReadLine();
    
    0 讨论(0)
  • 2021-01-15 05:09

    Linq is the way to go here to make your life a lot easier...

    var sorted=word.OrderBy(n => n.Length);
    var shortest = sorted.FirstOrDefault();
    var longest = sorted.LastOrDefault();
    
    0 讨论(0)
提交回复
热议问题