我想检查输入的字符串是否为整数
12 =正确
+12 =真
-5 =正确
4.4 = False
4as = False
我使用Admin
做到了,但是我想要使用ASCII而不使用int.TryParse
int.TryParse
答案 0 :(得分:2)
您还可以使用正则表达式:
var regex = new Regex(@"^[-+]?\d+$");
var str = Console.ReadLine();
if (regex.IsMatch(str))
{
Console.WriteLine($"{str} is a number!");
}
答案 1 :(得分:0)
为什么不使用:
if(intString[0] == '+' || intString[0] == '-') intString = intString.Substring(1, intString.Length - 1);
bool isNumber = intString.All(char.IsDigit);
答案 2 :(得分:0)
检查第一个字符是否为-| + |位,检查其余字符是否为数字
for (int i = 0; i < str.Length; i++)
{
var c = str[i];
if (i == 0)
{
if (!(c == '+' || c == '-' || char.IsDigit(c)) {
return false;
}
}
if (!char.IsDigit(c)) return false;
}
return true;
答案 3 :(得分:0)
不确定为什么不想使用int.TryParse
,但是以下代码应该这样做:
static bool IsValidInteger(string s)
{
var leadingSignSeen = false;
var digitSeen = false;
var toParse = s.Trim();
foreach (var c in toParse)
{
if (c == ' ')
{
if (digitSeen)
return false;
}
else if (c == '+' || c == '-')
{
if (leadingSignSeen || digitSeen)
return false;
leadingSignSeen = true;
}
else if (!char.IsDigit(c))
return false;
else
{
digitSeen = true;
}
}
return true;
}
这将接受带有前导符号以及前导和尾随空格的任何整数。前导符号和数字之间的空格也是可以接受的。
答案 4 :(得分:0)
仅供参考:您可以重构代码以简化代码,以实现完全相同的功能输出:
void Main()
{
int result;
Console.Write("Enter a Number : ");
while (!int.TryParse(Console.ReadLine(), out result))
{
Console.WriteLine("Please Enter Numbers Only.");
Console.Write("Enter a Number : ");
}
Console.WriteLine($"Entered String: {result} is a Number!");
Console.ReadKey();
}
如果您有充分的理由不使用int.TryParse
(例如,它缺少某些功能,或者这是要求您编写自己的练习),则可以使用上述替换{{1} },并调用int.TryParse
,并假设使用以下签名(或将类型IsNumericCustom
更改为您需要处理的任何数据类型)。
int
或者,如果您只关心值是数字而不是解析后的值:
public bool IsNumericCustom(string input, out int output)
{
//...
}
对于void Main()
{
string result;
Console.Write("Enter a Number : ");
//while (!int.TryParse((result = Console.ReadLine()), out _))
while (!IsNumericCustom((result = Console.ReadLine()))
{
Console.WriteLine("Please Enter Numbers Only.");
Console.Write("Enter a Number : ");
}
Console.WriteLine($"Entered String: {result} is a Number!");
Console.ReadKey();
}
public bool IsNumericCustom(string input)
{
//...
}
中的逻辑,这实际上取决于您希望实现的目标/为什么IsNumericCustom
/ int.TryParse
等不合适。这是几个实现(使用不同的函数名)。
decimal.TryParse
答案 5 :(得分:0)
根据您的要求,您似乎想要使用ASCII代码来断言输入的字符串是否为数字。
这是我想出的代码:
string str;
var index = 1;
int strintoA = 0;
bool isNegative = false;
//ASCII list of numbers and signs
List<int> allowedValues = new List<int> { 43, 45, 48, 49, 50, 51, 52, 53, 54, 55, 56,
57 };
bool flag = false;
while (!flag)
{
Console.WriteLine("Enter a Number : ");
str = Console.ReadLine();
if (str.Count(item => allowedValues.Contains((int)item)) == str.Count())
{
foreach (var item in str.Reverse())
{
if (item != 43 && item != 45)
{
strintoA += index * (item - 48);
index = index * 10;
}
else if(item == 45)
{
isNegative = true;
}
}
if(isNegative)
{
strintoA *= -1;
}
Console.WriteLine("Entered String: " + str + " is a Number!");
flag = true;
}
else
{
Console.WriteLine("Please Enter Numbers Only.");
}
}
Console.ReadKey();
}
allowedValues列表包含数字值和允许的符号(+和-)的ASCII表示形式。 foreach循环将重新生成插入的int值。
希望有帮助。