编辑 我不允许使用正则表达式或(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
检查用户输入字符串中是否有字母?
(请尽可能简单地回答!我真的很陌生,所以我还在学习编码术语)
答案 0 :(得分:0)
您可以使用正则表达式来匹配它:
^\$(0|\d+(,\d+)*)(\.\d+)?
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();
}
}