如何将字符串中的整数视为多位数字而不是单个数字?

时间:2018-10-07 10:40:58

标签: c# string

我的输入是一串整数,我必须检查它们是否为偶数,并在控制台上显示它们(如果是)。问题是我写的内容只检查单个数字,而不检查数字。

string even = "";

while (true)
{
    string inputData = Console.ReadLine();
    if (inputData.Equals("x", StringComparison.OrdinalIgnoreCase))
    {
        break;
    }

    for (int i = 0; i < inputData.Length; i++)
    {
        if (inputData[i] % 2 == 0)
        {
             even +=inputData[i];

        }
    }

}
foreach (var e in even)
    Console.WriteLine(e);
bool something = string.IsNullOrEmpty(even);
if( something == true)
{
    Console.WriteLine("N/A");
}

例如,如果输入为: 12 34 56 我的输出将是 2 4 6(每个数字都需要在新行上显示)。 我究竟做错了什么?任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:2)

使用string.Split获取独立部分,然后使用int.TryParse检查它是否为数字(选中Parse v. TryParse)。然后只取偶数:

var evenNumbers = new List<int>();
foreach(var s in inputData.Split(" ")) 
{
    if(int.TryParse(s, out var num) && num % 2 == 0)
        evenNumbers.Add(num); // If can't use collections: Console.WriteLine(num);
}

(注意使用out vars introduced in C# 7.0

如果可以使用linq,则类似于this answer

var evenNumbers = inputData.Split(" ")
                           .Select(s => (int.TryParse(s, out var value), value))
                           .Where(pair => pair.Item1)
                           .Select(pair => pair.value);

答案 1 :(得分:1)

我认为您一次在这里做太多事情。与其先检查数字是否为偶数,不如一次解决一个问题。

首先,我们可以通过将字符串分成“单词”来制作子字符串。净我们将每个子字符串转换为int,最后我们对偶数进行过滤,例如:

var words = inputData.Split(' ');  # split the words by a space
var intwords = words.Select(int.Parse);  # convert these to ints
var evenwords = intwords.Where(x => x % 2 == 0);  # check if these are even
foreach(var even in evenwords) {  # print the even numbers
    Console.WriteLine(even);
}

在这里仍然可能会出现某些“单词”不是整数的情况,例如"12 foo 34"。因此,您将需要在拆分和转换之间实施一些额外的过滤。