将字符串转换为要使用的数组的数字?

时间:2014-12-22 13:42:19

标签: c# arrays string int

我正在练习c#的数组。我做了这个,但遗憾的是它最终没有用。我想有这个:

例如,用户键入“third”。我希望在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();

4 个答案:

答案 0 :(得分:1)

最快的解决方案可能是添加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;
}

答案 1 :(得分:1)

这条线不起作用:

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;
}

答案 2 :(得分:0)

假设失败:int Choice = Convert.ToInt32(Console.ReadLine()),因为用户输入third但该字符串无法解析为数值,您可以使用switch语句并根据具体情况将其视为一般情况,或者,拥有Dictionary<string, int>个字符串及其各自的数字:["FIRST", 1]["SECOND", 2]等。然后,您执行以下操作:int chosenValue = Dictionary[Console.ReadLine().ToUpper()];

答案 3 :(得分:0)

它在此行崩溃

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

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

在你的情况下,最明显但又乏味的解决方案是拥有一个将string映射到int的庞大词典。

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

但它不是最优雅的解决方案。而是一种蛮力。虽然在你的情况下有五个项目并不那么困难。

其他选项,以及唯一合理的选项,如果您允许更大的选择,将尝试&#34;猜测&#34;正确的价值。您需要解析字符串并创建一个算法,如果字符串包含单词&#34; 20&#34;和单词&#34;三&#34;或&#34;第三&#34;然后它就是23.我将为你留下这个想法的实现。