我正在做一些功课而且我被卡住了,几乎所有东西似乎都正常工作,除了最后两行,我已经把东西转换成了一堆,我似乎无法做到正确。
家庭作业问题是
设计一个程序,要求用户输入一个字符串,然后将该字符串转换为摩尔斯电码。摩尔斯电码是一种代码,其中英文字母的每个字母,每个数字和各种标点符号由一系列点和短划线表示。表8-7显示了部分代码。
据我所知,字典条目应该正确转换所有字符,但我无法让程序运行,因为我猜我最后有无效的参数,我的代码副本在下面如果有人可以提供帮助,我会非常感激。我将评论它显示无效参数的位置。任何提示或推动正确的方向将非常感谢
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MorseCode
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void convertbtn_Click(object sender, EventArgs e)
{
string input = userinput.Text.Trim();
outputlabel.Text = mcodeconv(input);
}
private string mcodeconv(string input)
{
string codeConvert = string.Empty;
Dictionary<string, string> newmorse = new Dictionary<string, string> ();
{
newmorse.Add(" " , "space");
newmorse.Add("," , "--..--");
newmorse.Add("." , ".-.-.-");
newmorse.Add("?" , "..--..");
newmorse.Add("0" , "-----");
newmorse.Add("1" , ".----");
newmorse.Add("2" , "..---");
newmorse.Add("3" , "...--");
newmorse.Add("4" , "....-");
newmorse.Add("5" , ".....");
newmorse.Add("6" , "-....");
newmorse.Add("7" , "--...");
newmorse.Add("8" , "---..");
newmorse.Add("9" , "----.");
newmorse.Add("A" , ".-");
newmorse.Add("B" , "-...");
newmorse.Add("C" , "-.-.");
newmorse.Add("D" , "-..");
newmorse.Add("E" , ".");
newmorse.Add("F" , "..-.");
newmorse.Add("G" , "--.");
newmorse.Add("H" , "....");
newmorse.Add("I" , "..");
newmorse.Add("J" , ".---");
newmorse.Add("K" , "-.-");
newmorse.Add("L" , ".-..");
newmorse.Add("M" , "- --");
newmorse.Add("N" , "-.");
newmorse.Add("O" , "---");
newmorse.Add("P" , ".--.");
newmorse.Add("Q" , "--.-");
newmorse.Add("R" , ".-.");
newmorse.Add("S" , "…");
newmorse.Add("T" , "-");
newmorse.Add("U" , "..-");
newmorse.Add("V" , "...-");
newmorse.Add("W" , ".--");
newmorse.Add("X" , "-..-");
newmorse.Add("Y" , "-.--");
newmorse.Add("Z" , "--..");
KeyValuePair<string, string> newvalue = new KeyValuePair<string, string>();
};
char newChar;
foreach (char ex in input)
{
newChar = char.ToUpper(ex);
if(newmorse.ContainsKey(newChar)) //it throws the error here
{
codeConvert += newmorse[newChar]; //it throws the error here
}
else
{
codeConvert += ex;
}
}
return codeConvert;
}
private void exitbtn_Click(object sender, EventArgs e)
{
}
}
}
答案 0 :(得分:4)
您应该在此使用Dictionary<char, string>
并将.Add
调用中的第一个参数更改为单引号。您的错误是因为您使用Dictionary
参数使用string
键查找char
。
例如:
Dictionary<char, string> newmorse = new Dictionary<char, string>();
newmorse.Add(' ' , "space");
newmorse.Add(',' , "--..--");
newmorse.Add('.' , ".-.-.-");
newmorse.Add('?' , "..--..");
// etc