【问题标题】:checking input for morse code converter检查莫尔斯电码转换器的输入
【发布时间】:2013-01-29 02:52:41
【问题描述】:

我想检查用户的输入,以确保他们只输入点和破折号,任何其他字母或数字都会返回错误消息。我还想在转换时允许用户输入空格,如何删除或忽略空格?

string permutations;
        string entered = "";
        do
        {
            Console.WriteLine("Enter Morse Code: \n");
            permutations = Console.ReadLine();
         .
         .
         } while(entered.Length != 0);

谢谢!

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:
    string permutations = string.Empty;
    Console.WriteLine("Enter Morse Code: \n");
    permutations = Console.ReadLine(); // read the console
    bool isValid = Regex.IsMatch(permutations, @"^[-. ]+$"); // true if it only contains whitespaces, dots or dashes
    if (isValid) //if input is proper
    {
        permutations = permutations.Replace(" ",""); //remove whitespace from string
    }
    else //input is not proper
    {
        Console.WriteLine("Error: Only dot, dashes and spaces are allowed. \n"); //display error
    }
    

    【讨论】:

    • 谢谢 - 我现在正在尝试。
    • 需要添加Regex类的命名空间;比如“使用 System.Text.RegularExpressions;”
    • 是的,刚刚添加了它并且工作完美。感谢您的大力帮助。另外我想知道我是否想忽略空格并在转换过程中将其删除我该怎么做?
    • Trim 已经删除了所有空格;如果您的意思是在数据输入期间不允许空格,您可以将相关行更改为“bool isValid = Regex.IsMatch(permutations, @"^[-.]+$");”。然后如果存在任何空格,它将打印出错误消息。
    • 好吧,我想要一些东西,如果用户输入“--.-”,即使他输入“--.(空格)-”也是一样的,我希望两者都能正确转换为相同的输出
    【解决方案2】:

    假设您用一个空格分隔字母,用两个空格分隔单词。然后您可以使用这样的正则表达式来测试您的字符串是否格式正确

    bool ok = Regex.IsMatch(entered, @"^(\.|-)+(\ {1,2}(\.|-)+)*$");
    

    正则表达式解释:
    ^是字符串的开头。
    \.|-是一个点(用\转义,因为点在Regex中具有特殊含义)或(| ) 一个减号。
    + 表示一个或多个重复的剩余部分(点或减号)。
    \ {1,2} 一个或两个空格(它们后跟点或减号再次(\.|-)+) .
    * 重复空格后跟点或减号零次或多次。
    $ 是行尾。

    你可以在空格处分割字符串

    string[] parts = input.Split();
    

    两个空格将创建一个空条目。这允许您检测单词边界。例如

    "–– ––– .–. ... .  –.–. ––– –.. .".Split();
    

    产生以下字符串数组

    {字符串[10]} [0]:“--” [1]:“————” [2]:“.-.” [3]:“……” [4]:“。” [5]:“” [6]:“–.–.” [7]:“————” [8]:“-..” [9]:“。”

    【讨论】:

    • 这很好 - 我实际上会写下来以供将来参考,但我希望用户输入“--.-”或“--.(空格)-”,两者都会被处理相同的结果相同
    • 如果您只是想删除空格,可以使用String.Replace 方法:string result = input.Replace(" ", "");
    • 你是最棒的!我将创建一个不同的问题来将您标记为答案。
    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    相关资源
    最近更新 更多