问题
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 help, I dont think a for loop can work on its own. Any assistance would be appreciated.
for (int i = 5; i <0; i++)
{
string[] word = new string[5];
Console.WriteLine("Type in a word");
word[i] = Console.ReadLine();
int length = word[i].Length;
int min = word[0].Length;
int max = word[0].Length;
string maxx;
string minn;
if (length > max)
{
maxx = word[i];
Console.Write("Shortest");
}
if (length < min)
{
minn = word[i];
Console.Write("Longest");
}
}
Console.ReadKey(true);
}
回答1:
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);
}
accarding to your code to write this code.I hope it is a right answer~~Thanks!!!
回答2:
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();
回答3:
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);
回答4:
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();
}
回答5:
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...
回答6:
If you use LINQ, using Max/Min method is a better way than sorting.
var longest = word.Max(s=>s.Length);
var shortest = word.Min(s=>s.Length);
回答7:
string[] words = new string[5];
foreach (string word in words) {
Console.WriteLine("Type in a word");
word = Console.ReadLine();
var ordered = words.Where(w=>!String.IsNullOrEmpty(w)).OrderBy(w=>w.length)
if (ordered.First() == word)
Console.Write("Shortest");
if (ordered.Last() == word)
Console.Write("Longest");
// First time will display both "Shortest" and "Longest" since it's the only word.
// You may adjust code depending on what do you want to do in case of words of same length.
Console.ReadKey(true);
}
}
回答8:
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();
来源:https://stackoverflow.com/questions/18394461/c-sharp-finding-the-shortest-and-longest-word-in-a-array