【问题标题】:How can I check if a string follows the pattern of american currency?如何检查字符串是否遵循美国货币的模式?
【发布时间】:2019-06-20 14:30:35
【问题描述】:

我正在处理一个问题,希望我从用户那里获得一个字符串输入,通过一个方法运行它,该方法将检查每个字符以查看它是否遵循美国货币的模式。它必须是进入方法的字符串。金额可以是从 1 美元到 1000 美元的任何金额,但必须输入格式为 $x.xx、$xx.xx、$xxx.xx,只要用户输入的金额与上述格式一致,则我的程序应该输出它的“有效”其他任何东西都是“无效格式”输出。第一个字符必须是“$”,我不能使用正则表达式。

我获取用户输入,然后使用 .NullOrWhiteSpace 对其进行验证。然后将保存用户输入的字符串值发送到我创建的方法。从这一点开始,我不知道如何继续。我试过 .ToCharArray,我也试过做一个长而复杂的 if 语句,我已经研究了几个小时,但找不到一个可靠的方法来写出来。

 class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("enter amount between $1.00 and $1000.00");
        string valueUS = Console.ReadLine();
        while (string.IsNullOrWhiteSpace(valueUS))
        {
            Console.WriteLine("Please enter in an amount");
            valueUS = Console.ReadLine();
        }

        currencyChecker(valueUS);

    }

    public static string currencyChecker(string currencyString)
    {

        char[] currencyArray;
        currencyArray = currencyString.ToCharArray();
        for (int i = 0; i < currencyArray.Length; i++)
        {

            if (currencyArray[0] == '$')
            {

            }

        }
        return currencyString;

下面的方法应该检查用户输入的每个字符,并验证它是否与上面描述的美国货币模式相匹配,并输出它的“有效”其他任何东西都应该报告为“无效”

【问题讨论】:

  • The answers to this question 展示了一个很好的解决方案,可以很好地完成工作(当然假设这不是家庭作业,在这种情况下,你几乎肯定会因为使用正则表达式作弊而失败)。
  • 是的,不幸的是我不能使用正则表达式,如果我什至应该使用 .ToCharArray 我想我可能过于复杂了。

标签: c#


【解决方案1】:

通常,您会为这样的事情使用正则表达式。 一个简单的正则表达式是^\$\d+.\d\d$。基本上,这意味着字符串应该以$ 符号开头,最后有一个数字、一个点和另外两个数字。

但是,这可以在没有正则表达式的情况下完成,并且由于这似乎是一项家庭作业,因此我会在正确的方向上为您提供帮助。

所以你需要测试以$开头的字符串,右边第三个字符是.,其他都是数字。

你的方法应该返回一个 bool 来指示有效/无效的结果——所以你应该这样做:

 static bool IsCurrency(string currency)
 {

     // Check if the string is not null or empty - if not, return false

     // check if the string is at least 5 chars long, since you need  at least $x.xx - if not, return false

     // Check if the first char is $ - if not, return false

     // Check if the 3rd char from the end is . - if not, return false

     // check if all the other chars are digits - if not, return false


     // If all checks are valid -
     return true;
 }

请注意,测试的顺序很关键,例如,如果您在检查您至少有 5 个数字之前检查右边的第三个数字是 .,您可能会尝试检查一个只有 2 个数字的字符串数字长并获得异常。

因为这(可能)是家庭作业,所以我将把代码编写部分留给你,所以你实际上会从中学到一些东西。

【讨论】:

  • 我非常感谢您的指导,我很确定我可以用这些信息解决问题,这超出了我的想法,这很有挑战性。
  • 万事开头难。很高兴帮助:-)
  • 您可以将至少五个字符长的检查更改为检查字符串是否恰好在 5 到 7 个字符之间,否则返回 false
  • @Fabjan 是的,如果有上限,也可以通过检查输入字符串的长度来检查,但如果上限是 $9999.99,则需要 8 个字符,而不是 7 个。
  • @ZoharPeled 是的,OP 指定“(输入)可以从 1 美元到 1000 美元不等”...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-07
  • 2014-12-29
  • 2022-01-17
  • 2019-08-30
  • 2010-10-17
  • 1970-01-01
相关资源
最近更新 更多