我想找到我的程序发现的字符串中最长的单词的索引/或位置
I want to find the index/ or position of the word that my program found to be the longest in the string
这是我的代码,我正在接受用户的输入,我想找出用户输入的字符串中最长单词的索引/或位置。我似乎无法弄清楚这一点!
无论我在哪里寻求帮助,我都会得到 indexOf() 方法,在该方法中,您必须手动键入要查找索引的单词。
这是我的代码:
using System;
using System.Linq;
public class Question1
{
public static void Main(string[] args)
{
Console.WriteLine("Enter String:");
string line = Console.ReadLine();
string[] words = line.Split(new[] { " " }, StringSplitOptions.None);
string word = "";
int ctr = 0 , len, max = 0;
foreach (String s in words)
{
if (s.Length > ctr)
{
word = s;
ctr = s.Length;
}
}
Console.WriteLine("Longest String : " + word);
Console.WriteLine("Length : " + ctr);
}
}
要从句子中找到最长的单词索引,您必须使用 Array
class 中的 .indexOf()
方法。
而不是
Console.WriteLine(word.IndexOf(word, ctr));
试试,
int longestWordIndex = Array.IndexOf(words, word);
Console.WriteLine($"Index of Longest word = {longestWordIndex}");
您可以这样找到您找到的单词的索引:
int indexOfWord = line.IndexOf(word, StringComparison.CurrentCulture);
所以如果这个词是第一个词,indexOfWord
将为0。如果是“Hello William”中的“William”,那么它将是6,依此类推
标点符号和其他字符的验证:
const string sentence = "Find the position of the longest word in this sentence";
var longestWord =
sentence
.Split(' ')
.OrderByDescending(w => w.Length)
.First();
var position = sentence.IndexOf(longestWord, StringComparison.InvariantCulture);
在一般情况下,我们应该得出结论:单词是什么。如果我们同意
Word is a non-empty sequence of letters and apostrophes
我们可以在正则表达式的帮助下匹配单词,然后查询匹配到在 Linq 的帮助下获得最长的一个。
请注意,在一般情况下(带标点符号)Split
是不够的。
代码:
using System.Linq;
using System.Text.RegularExpressions;
...
string line =
"This is the sentence; it has some punctuations! ---note-it's-not-the-longest--";
var result = Regex
.Matches(line, @"[\p{L}']+")
.Cast<Match>()
.MaxBy(match => match.Value.Length);
Console.Write(
$"Word is \"{result.Value}\" at postion {result.Index} (length {result.Length})"
);
结果:
Word is "punctuations" at postion 34 (length 12)
这是我的代码,我正在接受用户的输入,我想找出用户输入的字符串中最长单词的索引/或位置。我似乎无法弄清楚这一点! 无论我在哪里寻求帮助,我都会得到 indexOf() 方法,在该方法中,您必须手动键入要查找索引的单词。
这是我的代码:
using System;
using System.Linq;
public class Question1
{
public static void Main(string[] args)
{
Console.WriteLine("Enter String:");
string line = Console.ReadLine();
string[] words = line.Split(new[] { " " }, StringSplitOptions.None);
string word = "";
int ctr = 0 , len, max = 0;
foreach (String s in words)
{
if (s.Length > ctr)
{
word = s;
ctr = s.Length;
}
}
Console.WriteLine("Longest String : " + word);
Console.WriteLine("Length : " + ctr);
}
}
要从句子中找到最长的单词索引,您必须使用 Array
class 中的 .indexOf()
方法。
而不是
Console.WriteLine(word.IndexOf(word, ctr));
试试,
int longestWordIndex = Array.IndexOf(words, word);
Console.WriteLine($"Index of Longest word = {longestWordIndex}");
您可以这样找到您找到的单词的索引:
int indexOfWord = line.IndexOf(word, StringComparison.CurrentCulture);
所以如果这个词是第一个词,indexOfWord
将为0。如果是“Hello William”中的“William”,那么它将是6,依此类推
标点符号和其他字符的验证:
const string sentence = "Find the position of the longest word in this sentence";
var longestWord =
sentence
.Split(' ')
.OrderByDescending(w => w.Length)
.First();
var position = sentence.IndexOf(longestWord, StringComparison.InvariantCulture);
在一般情况下,我们应该得出结论:单词是什么。如果我们同意
Word is a non-empty sequence of letters and apostrophes
我们可以在正则表达式的帮助下匹配单词,然后查询匹配到在 Linq 的帮助下获得最长的一个。
请注意,在一般情况下(带标点符号)Split
是不够的。
代码:
using System.Linq;
using System.Text.RegularExpressions;
...
string line =
"This is the sentence; it has some punctuations! ---note-it's-not-the-longest--";
var result = Regex
.Matches(line, @"[\p{L}']+")
.Cast<Match>()
.MaxBy(match => match.Value.Length);
Console.Write(
$"Word is \"{result.Value}\" at postion {result.Index} (length {result.Length})"
);
结果:
Word is "punctuations" at postion 34 (length 12)