C# 制作一行字符串

C# 制作一行字符串,c#,.net,C#,.net,我需要帮助我在c#中有一个任务,就是制作一个接受用户输入(字符串)的程序。给你在黑暗中可以听到的不同动物发出的噪音,评估每个噪音以确定它属于哪种动物。狮子说“Grr”,老虎说“Rawr”,蛇说“Ssss”,鸟说“唧唧” 输入格式: 一个字符串,表示您听到的噪音,它们之间有一个空格 输出格式: 包含你听到的每种动物的字符串,每种动物后面都有空格。(动物可以重复) 我做这个 使用系统; 使用System.Reflection.Metadata; 使用System.Runtime.CompilerSe

我需要帮助我在c#中有一个任务,就是制作一个接受用户输入(字符串)的程序。给你在黑暗中可以听到的不同动物发出的噪音,评估每个噪音以确定它属于哪种动物。狮子说“Grr”,老虎说“Rawr”,蛇说“Ssss”,鸟说“唧唧”

输入格式: 一个字符串,表示您听到的噪音,它们之间有一个空格

输出格式: 包含你听到的每种动物的字符串,每种动物后面都有空格。(动物可以重复)

我做这个

使用系统;
使用System.Reflection.Metadata;
使用System.Runtime.CompilerServices;
使用System.Security.Cryptography.X509证书;
使用系统文本;
使用System.Text.RegularExpressions;
名称空间nekaVjezba
{
班级计划
{
静态void Main(字符串[]参数)
{
var text=Console.ReadLine();
var matches=Regex.matches(文本,@“\w+[^\s]*\w+\w”);
foreach(匹配中的匹配)
{
var word=match.Value;
如果(单词==“Grr”)
{
控制台。WriteLine(“狮子”);
}
else if(word==“Rawr”)
{
控制台。WriteLine(“老虎”);
}
否则,如果(单词==“Ssss”)
{
控制台。书写线(“蛇”);
}
else if(word==“Chirp”)
{
控制台。书写线(“鸟”);
}
}
}
}
}
这是工作,但我的输出是

  • 狮子
  • 狮子
  • 老虎
但它应该在一行中
狮子虎蛇

有几种方法可以改进这一点,但最简单的建议可能是构建一个输出字符串,添加到该字符串中,然后用一条语句将其写入控制台,类似于以下内容(半伪代码):


写而不是
Console.WriteLine(“…”)
只是
Console.Write(“…”
,这样您就不会写到新的行,而是在同一行上。然后在应该输出的每个单词后面添加一个空格(
Console.Write(“Tiger”);
),如下代码所示:

using System;
using System.Reflection.Metadata;
using System.Runtime.CompilerServices;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Text.RegularExpressions;

namespace nekaVjezba
{
    class Program
    {
        static void Main(string[] args)
        {
            var text = Console.ReadLine();
            var matches = Regex.Matches(text, @"\w+[^\s]*\w+|\w");
           

        foreach (Match match in matches)
        {
          var word = match.Value;
          if (word == "Grr")
          {
            Console.WriteLine("Lion ");
          }
          else if (word == "Rawr")
          {
            Console.Write("Tiger ");
          }
          else if (word == "Ssss")
          {
            Console.Write("Snake ");
          }
          else if (word == "Chirp")
            Console.Write("Bird ");
          }
        }
    }
}

输出现在可以是:“狮子-老虎-蛇”

一些事情可以让这更容易做到

首先,不需要正则表达式来解析以空格分隔的输入。所以,除非这是一个要求,否则您可以使用String.Split

其次,您可以使用switch语句或switch表达式来匹配输入标记。你也可以把它分解成一个单独的方法。下面是使用开关表达式的示例:

    static IEnumerable<string> ToAnimal(IEnumerable<string> sounds)
    {
        foreach (var sound in sounds)
        {
            yield return sound switch
            {
                "Grr" => "Lion",
                "Rawr" => "Tiger",
                "Ssss" => "Snake",
                "Chirp" => "Bird",
                _ => throw new ArgumentException("unknown sound")
            };
        }
    }

显然,您需要使用Console.ReadLine来获取输入字符串。

尽管有很多方法可以做到这一点。然而,这里有一个简洁的解决方案,但这里有一个简单的解决方案,这里有一个简洁的解决方案,但这里有一个简单的解决方案,这里有一个简洁的解决方案(到o、p、p、p、p、p、p、7、7、7、7、8、y、y、y、y、y、y、y、y、y、y、y、y、y、y、y、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8使用
字典
和LINQ

由于单词之间用空格分隔,因此简单的
字符串.Split
就可以了

var dict = new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)
{
   {"Grr", "Lion"},
   {"Rawr", "Tiger"},
   {"Ssss", "Snake"},
   {"Chirp", "Bird"},
};

var animals = Console
   .ReadLine()?
   .Split(' ', StringSplitOptions.RemoveEmptyEntries)
   .Select(word => !dict.TryGetValue(word, out var animal) ? "N/A" : animal)
   .ToList();

if (animals?.Any() == true)
   Console.WriteLine(string.Join(", ", animals));
else
   Console.WriteLine("Nothing entered");
输出

grr bob chirp ssss
Lion, N/A, Bird, Snake

其他资源

返回包含此实例中的子字符串的字符串数组 由指定字符串或Unicode的元素分隔的 字符数组

比较键时要使用的
IEqualityComparer
实现,或 null可将默认的
EqualityComparer
用于密钥类型

获取与指定键关联的值

将序列中的每个元素投影到新形式中

连接指定数组的元素或 集合,在每个元素或元素之间使用指定的分隔符 成员

在C#6及更高版本中可用,空条件运算符应用 对其操作数的成员访问、、、或元素访问、[]操作 仅当该操作数的计算结果为非空时;否则,它将返回null

语言集成查询(LINQ)是一组技术的名称 基于将查询功能直接集成到C语言中# 语言。传统上,对数据的查询表示为简单 在编译时未进行类型检查或IntelliSense支持的字符串。 此外,您还必须为每个查询学习不同的查询语言 数据源类型:SQL数据库、XML文档、各种Web 服务等等。使用LINQ,查询是一种一流的语言 构造,就像类、方法、事件一样。您编写查询 使用语言对对象的强类型集合进行攻击 关键词和熟悉的运算符


尝试将
Console.WriteLine
更改为
Console.Write
并在每个输出后添加空格(
Console.Write(“snake”);
)还有一个控制台。写……你也可以考虑创建一个<代码>字典>代码>将噪声映射到动物。最后,看看
string.Split
。一般来说,如果你不需要正则表达式,最好使用非正则表达式solution@jvzznjs您可以通过单击答案左上角的绿色复选标记来感谢他人。
grr bob chirp ssss
Lion, N/A, Bird, Snake