将字符串转换为数字以供数组使用

本文关键字:数组 数字 字符串 转换 | 更新日期: 2023-09-27 18:35:03

我正在使用 c# 数组进行练习。我已经做到了,但遗憾的是它最终不起作用。我想要这个:

例如,用户键入"第三"。我希望在 int 中将其转换为"2",因此计算机选择第三个输入的数字。正如我编码的那样,它现在崩溃了。

Console.WriteLine("Please enter 5 numbers of choice.");
Int32[] Names = new Int32[5];
Names[0] = Convert.ToInt32(Console.ReadLine());
Names[1] = Convert.ToInt32(Console.ReadLine());
Names[2] = Convert.ToInt32(Console.ReadLine());
Names[3] = Convert.ToInt32(Console.ReadLine());
Names[4] = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("The number you typed third is " + Names[2]);
Console.Clear();
Console.WriteLine("Which number would you like the computer to remember? first, second, third etc.");

int Choice = Convert.ToInt32(Console.ReadLine());
string ChosenNumber = (Console.ReadLine());
int first = 0;
int second = 1;
int third = 2;
int fourth = 3;
int fifth = 4;
Console.ReadKey();

将字符串转换为数字以供数组使用

最快的解决方案可能是添加一个switch语句来测试用户输入

Console.WriteLine("Which item to view");
switch(Console.ReadLine().ToLower())
{
    case "first":
       Console.WriteLine(Names[0]);
       break;
    case "second":
       //etc
    default: 
       Console.WriteLine("Not a valid entry");
       break;
}

此行不起作用:

int Choice = Convert.ToInt32(Console.ReadLine());

为什么?由于 .NET 不会将first转换为 1 .只需"1" 1.

试试这个:

string input = Console.ReadLine();
// create an array of keywords
string[] choices = new string[] { "first", "second", "third" };
// get the index of the choice
int choice = -1;
for (int i = 0; i < choices.Length; i++)
{
    // match case insensitive
    if (string.Equals(choices[i], input, StringComparison.OrdinalIgnoreCase))
    {
        choice = i; // set the index if we found a match
        break; // don't look any further
    }
}
// check for invalid input
if (choice == -1)
{
   // invalid input;
}

假设失败:int Choice = Convert.ToInt32(Console.ReadLine()),因为用户输入third但该字符串无法解析为数值,您可以使用switch语句并将其作为个案基础,或者,具有字符串及其各自数字的Dictionary<string, int>["FIRST", 1]["SECOND", 2]等。然后,你做这样的事情:int chosenValue = Dictionary[Console.ReadLine().ToUpper()]; .

它在此行崩溃

int Choice = Convert.ToInt32(Console.ReadLine());

这是因为从string转换为int不适用于自然语言单词。它适用于string类型。因此,例如,您可以将字符串"3"转换为整数3。但是你一言以蔽之"three"都做不到.

在您的情况下,最明显但最乏味的解决方案是拥有一个巨大的字典,将string映射到int s。

var myMappings = new Dictionary<string, int> 
{
    { "first", 0 },
    { "second", 1 },
    { "third", 2 },
    { "fourth", 3 },
    { "fifth", 4 },
}

然后,在字典中搜索用户输入。

var input = Console.ReadLine();
var result = myMappings[input]; // safer option is to check if the dictionary contains the key

但这不是最优雅的解决方案。而是蛮力。虽然在你的五个项目的情况下,这并不难。

其他选择,也是唯一合理的选择,如果您

允许更大的选择,是尝试"猜测"正确的值。您需要解析字符串并创建一个算法,如果字符串包含单词"二十"和单词"三"或"第三",则为 23。我会把这个想法的实现留给你。