我正在处理家庭作业问题,在这一方面需要一些帮助。我不是要求你为我做功课,只是需要一些帮助,因为我在网上找不到任何其他信息。
我创建了一个Overload方法,它以字符串数组作为参数。我相信我正确创建了方法,允许我让用户输入多个字符串,这些字符串将存储到数组中。
我现在正在使用静态void main并且无法考虑需要实现的代码以允许用户输入多个字符串,直到用户在其自己的行上输入“q”,其中将向用户显示他们刚输入的单词数量。
请参阅下面的代码。您将能够看到重载方法以及我在静态void main中粘贴的部分,该部分用星号括起来。
同样,我不是要求你做我的hw,我只需要一些帮助。此外,这是我需要程序执行的示例。谢谢你先进的帮助。
输入几个句子,完成输入句子后,在最后一行单独使用q。
你好,你好吗?
我很好,你呢?
很好,很好。
q
该文中有12个单词。
输入几个句子,完成输入句子后,在最后一行单独使用q。
q
static void Main(string[] args)
{
Console.WriteLine("Main Menu");
Console.WriteLine("Choose from the following:");
Console.WriteLine("1. Word Count" + "\n" + "2. Vowel Counting" + "\n" + "3. Exit");
Console.Write("Enter your selection: ");
int s1 = Convert.ToInt32(Console.ReadLine());
if(s1 == 1)
{
Break:;
Console.WriteLine("Word Counter Menu");
Console.WriteLine("Choose from the following");
Console.WriteLine("1. Count the word in one sentence" + "\n" +
"2. Count the word in a paragraph" + "\n" +
"3. Parent Menu");
Console.Write("Enter your selection ");
int s2 = Convert.ToInt32(Console.ReadLine());
if(s2 == 1)
{
string sent1;
while (true)
{
Console.Write("Enter a sentence (q to quit, d for default): ");
sent1 = Console.ReadLine();
Console.WriteLine("There are " + Def1(sent1) + " words in the sentence: " + sent1);
if(sent1 == "d")
{
sent1 = "Hello";
Console.WriteLine("There are " + Def1(sent1) + " words in the sentence: " + sent1);
}
if(sent1 == "q")
{
goto Break;
}
}
}
**if (s2 == 2)
{
string sent2;
Console.WriteLine("Enter several sentences, when done entering" +
" sentences, use q by itself on the last line:");
while(true)
{
sent2 = Console.ReadLine();
if(sent2 == "q")
{
// Console.WriteLine("There are " + + " words in that text");
break;**
}
}
}
}
}
static int Def1(string d1 = "Hello")
{
int countWords = 0;
for (int i = 1; i < d1.Length; i++)
{
if (char.IsWhiteSpace(d1[i - 1]) == true)
{
if (char.IsLetterOrDigit(d1[i]) == true ||
char.IsPunctuation(d1[i]))
{
countWords++;
}
}
}
if (d1.Length > 2)
{
countWords++;
}
return countWords;
}
static int Def1(string[] d1)
{
var e = from a in d1 select a;
int cnt1 = e.Count();
return cnt1;
}
static int vow1(string v1)
{
char[] vowels = new char[] { 'a', 'A', 'e', 'E', 'i', 'I', 'o', 'O', 'u', 'U' };
int total = 0;
for(int i = 0; i < v1.Length; i++)
{
if(vowels.Contains(v1[i]))
{
total++;
}
}
return total;
答案 0 :(得分:0)
首先,你的循环可以是这样的。
您需要两个变量。第一个是保存用户输入的临时值。它的值与while循环中的q
进行比较。在临时值不等于q
之前,我们应该继续循环并将temp
的值附加到另一个必须保存所有输入的字符串(最后q
除外)。
if (s2 == 2)
{
string temp = "";
Console.WriteLine("Enter several sentences, when done entering" +
" sentences, use q by itself on the last line:");
string finalString = ""; // initial empty value
while((temp = Console.ReadLine()) != "q") // assign input to temp and check its value
{
finalString += " " + temp; // temp was not `q` so append it to text.
}
Console.WriteLine(???); // explained later
}
请注意,我们为每个附加temp
添加了额外的空间finalstring
,以确保单词在行尾和下一行的开头分开。
Console.WriteLine(???);
中的内容。
使用Split
方法可以轻松完成此操作。您可以按空格和逗号分隔finalstring
。然后检查它是否包含单词。
var possibleWords = finalString.Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries)
RemoveEmptyEntries
只是从拆分结果中删除空项的选项。
现在您必须检查每个字符串项是否包含字母。如果它们包含字母,我们将其视为单词。
var letterCount = possibleWords.Count(x => x.Any(char.IsLetter));
方法Count
计算x => x.Any(char.IsLetter)
何时返回true。
x.Any(char.IsLetter)
包含至少一个字母时, x
将返回true。
所以你可以打印这样的东西。
Console.WriteLine("There are " + letterCount + " words in that text");
计算字母的更好方法是使用Regexes,但这比你的更高,所以我不想把它放在这里。希望它有所帮助。
答案 1 :(得分:0)
为了计算多个字符串(段落)中的单词数,您可以像这样编写代码
if (s2 == 2) //2. Count the word in a paragraph
{
string senttence2;
List<string> sentences = new List<string>();
Console.WriteLine("Enter several sentences, when done entering" +
" sentences, use q by itself on the last line:");
senttence2 = Console.ReadLine();
while (senttence2 != "q")
{
sentences.Add(senttence2);
senttence2 = Console.ReadLine();
}
Console.WriteLine("There are " + GetWordCount(sentences) + " words in that text");
}
这是方法(使用Linq
)
static int GetWordCount(IEnumerable<string> sentences)
{
return sentences.Select(s => s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).Count()).Sum();
}