如何使用.ToCharArray检查用户输入是否包含任何字母

时间:2019-01-25 21:28:42

标签: c# .net

编辑 我不允许使用正则表达式或(foreach)或(.IsLetter),因为我的班级还没有学过。

我看到这里已经问过这个问题,但是所有问题都是关于如何用Java或Python来做的...我正在使用C#。

对于我的家庭作业,我必须验证用户输入的内容是否为货币值(即25.34美元)。我已经检查了是否有“ $”或“。”,但是我还没有弄清楚如何检查他们是否输入了任何字母。如果他们这样做了,那将是无效的,我将不得不再次提示他们。

我尝试使用.TryParse,但是我想只能检查是否有数字,而不是字母。

我的老师给了我一个提示,并说要使用.ToCharArray。我在Microsoft网站上查找了如何使用它,但感到困惑。这是网站上的代码:

string str = "012wxyz789";
char[] arr;

arr = str.ToCharArray(3, 4);
Console.Write("The letters in '{0}' are: '", str);

// results:
// The letters in '012wxyz789' are: 'wxyz'

这个问题是字符串是硬编码的,我需要获得用户输入,所以我不知道是否有字母。

如何使用.ToCharArray检查用户输入字符串中是否有字母?

(请尽可能简单地回答!我真的很陌生,所以我还在学习编码术语)

5 个答案:

答案 0 :(得分:0)

您可以使用正则表达式来匹配它:

^\$(0|\d+(,\d+)*)(\.\d+)?

Demo

Regular Expression Language - Quick Reference

C#示例:

string pattern = @"^\$(0|\d+(,\d+)*)(\.\d+)?";
Regex regex = new Regex(pattern, RegexOptions.Singleline);
string Data = @"$1,1225,14558.00";
Match Re = regex.Match(Data);
if(Re.Groups.Count > 1)
    Console.WriteLine("Valid Input!");
else
    Console.WriteLine("Invalid Input!");

答案 1 :(得分:0)

不要使用ToCharArray,只需遍历字符串foreach(char c in str),然后检查每个字符char.IsLetter(c)。像这样:

string str = "012wxyz789";
Console.Write("The letters in are:");
foreach (char c in str) { //same result as foreach (char c in str.ToCharArray())
    if (char.IsLetter(c))
        Console.Write(c);
}

如果在以上str循环中将str.ToCharArray()替换为foreach,您将获得完全相同的结果。这就是为什么我说ToCharArray是不必要的。字符串在内部是一种字符数组。

但是,您还可以通过其他方式(例如使用正则表达式或LINQ)更轻松地完成此操作。更重要的是,问题的第一部分是从字符串到十进制的解析问题,正如注释中其他指出的那样,因此,该答案更适用于问题的第二部分,因为它通常是如何从字符串中提取字母。

答案 2 :(得分:0)

您的老师可能一直在暗示您使用ToCharArray遍历它,并检查它是否是字母。

%macro type(year=,type=);
proc sql noprint;
select mean(Total_Retail_Price) into: mean_value
from salesxls
where year(order_date)=&year. and Order_type=&type;
quit;

proc print data=salesxls ;    
title "The mean of Total Retail Price is: &mean_value."; 
where year(order_date)=&year. and Order_type=&type;    
format order_date year4.;
run;
%mend type;

答案 3 :(得分:0)

现在,我不太擅长于此编程,但是在将字符串转换为char []并将其与有效的char []列表进行比较之后,您可以对字符串进行一些简单的迭代。

    private static bool CheckStringForNumbers(string stringToCheck)
    {
        var chars = stringToCheck.ToCharArray();
        var numbers = new char[] {'$', '.', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

        foreach (var item in chars)
        {
            var itemIsNumber = numbers.Contains(item);
            Console.WriteLine(item + " == " + itemIsNumber);

            if (!itemIsNumber) return false;
        }

        return true;
    }

这是一个非常幼稚的示例,但是您的想法是,您可以将字符串转换为char [],并遍历数组中的每个char项(以下示例中的项),然后查看该项包含在有效项目的另一个char []中。如果项目有效(在这种情况下为数字),那么一切都很好。但是,如果该项目未包含在有效字符数组中,那么您就会知道用户输入了他们不应该输入的内容。

答案 4 :(得分:0)

使用您的老师提示,我会这样走。遍历数组,TryParse将返回True / false。用它做你想做的。我添加了NotNumbers字符串来保存答案。

        string str = "012wxyz789";
        string NotNumbers = "";
        char[] arr;

        arr = str.ToCharArray();

        foreach (char c in arr)
        {
            int outValue;
            bool IsNumber = Int32.TryParse(c.ToString(), out outValue);
            if (IsNumber)
            {
                // Do something to number
            }
            else
            {
                // Do something to other
                // Build a string with all the non number values
                NotNumbers = NotNumbers + c.ToString();
            }
        }