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