我在将字符串中的十进制数保存到数组的一个元素时遇到问题。示例:我想将String =“5.2 / 2”保存到字符串数组[0] =“5.2”[1] =“2”这里的问题是用户可以在数字之间写入所有内容,程序将忽略它。 ..
这是我的保存号码计划。 现在它将5.2保存为52 ......
static string[] saving_numbers(string string_undone)
{
string[] String_array = new string[string_undone.Length];
String_array[0] += string_undone[0];
int Help_index = 0;
for (int i = 1; i < string_undone.Length; i++)
{
if (string_undone[i] > 47 & string_undone[i] < 60)
{
if (string_undone[i-1] =='-' & Help_index==0)
{
Console.Write("Error: you gave us negative number which is not allowed!");
Main();
break;
}
if (string_undone[i - 1] < 46 | string_undone[i - 1] > 59 | string_undone[i - 1] == '/')
{
Help_index++;
String_array[Help_index] += string_undone[i];
}
else
{
String_array[Help_index] += string_undone[i];
}
}
}
return String_array;
}
我的程序必须找到这个“4 ^ 7 / 2.5 * 3.1”的答案我不知道我是盲目的还是那个愚蠢但我根本无法解决这个小事
我不能使用像String.Split()或Char.IsDigit这样的东西...只有我可以使用的东西是使用单独的符号和函数的基本函数,可以返回字符串的长度我可以使用Convert.ToDouble我后来用于将字符串元素转换为double
答案 0 :(得分:0)
我认为您可能会通过以下.NET Framework属性和方法获得一些帮助:
如果您想要更高级的方法来解密输入字符串,您可以使用RegEx
class将输入字符串切片为可处理组件(实际上是数字和运算符)。
这个任务不是那么简单,可以通过对有问题的输入字符串做出一些假设来使更容易。一个重要的假设可能是:
然后你可以这样开始:
// Get the individual elements
String[] components = string_undone.Split(" ");
// Now detect all available decimals...
List<Decimal> decimals = new List<Decimal>;
Decimal number = null;
foreach(String s in components)
{
if(Decimal.TryParse(s, out number)
decimals.Add(number);
}
希望这会有所帮助,让你走向正确的方向。
答案 1 :(得分:0)
这是调用正则表达式的地方之一:
var reg = new Regex(@"\s*([0-9.]+).([0-9.]+)");
var match = reg.Match(" 5.2/2");
var first = match.Groups[1].Value; // = "5.2"
var second = match.Groups[2].Value; // = "2"
我也用“123.4 + 56”&amp; “3; 5.6”
答案 2 :(得分:0)
你能用:
检查你的字符串吗? string str;
str.Contains('.');
通过“包含”检查您是否有“。”或“/”或其他任何东西
str.Split('.');
通过“拆分”在数组内的字符之间保留数字并保存它们。
注意操作中的优先级并通过开关盒检查它们,并且您自己根据这些优先级为它们添加括号。
答案 3 :(得分:0)
你没有写小数,因为ascii值是46。
if (string_undone[i] > 47 & string_undone[i] < 60)
...
因为它小于你的范围,所以永远不会输入if语句,小数位也不会写入你的字符串。