如何允许用户输入多个字符串到数组中,直到键入字母“q”

时间:2015-11-04 18:53:46

标签: c# arrays regex string

我正在处理家庭作业问题,在这一方面需要一些帮助。我不是要求你为我做功课,只是需要一些帮助,因为我在网上找不到任何其他信息。

我创建了一个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;

2 个答案:

答案 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();
}