Проблема в чтении чисел - PullRequest
0 голосов
/ 04 июля 2011

Привет, друзья! Я абсолютный новичок в c #.Я хочу читать цифры в следующем формате

2

1 10

3 5

Для чтения 2 я использовал метод Convert.ToInt32(Console.ReadLine()) и успешносохранил это.Но для следующего ввода я хочу прочитать число, а после пробела я хочу прочитать другое число.Я не могу использовать метод ReadLine (). Я использовал Convert.ToInt32(Console.Read())

Но число 1 читается как 49

Так как мне добиться чтения чисел

В JavaЯ нашел похожий класс, называемый Scanner, который содержит строку методов nextInt() Есть ли какой-нибудь C # эквивалентный этому классу.

Короче говоря, я просто хочу знать, как читать и хранить числа (целые или плавающие) в C #.

Ответы [ 5 ]

4 голосов
/ 04 июля 2011

Вы можете использовать ReadLine() и просто разбить на пробел, то есть

void Main( string[] args )
{
    var numbers = new List<int>();
    while(whatever)
    {
        var input = Console.ReadLine();
        var lines = input.Split( 
            new char[] { ' ' }, 
            StringSplitOptions.RemoveEmptyEntries 
            );

        foreach( var line in lines )
        {
            int result;
            if( !int.TryParse( line, out result ) )
            {
                // error handling
                continue;
            }

            numbers.Add( result );
        }
    }
}
2 голосов
/ 04 июля 2011

Вы можете использовать метод Split, чтобы разбить строку на числа.

while (true)
{
   var s = Console.ReadLine();
   if (s == null) break;
   foreach (var token in s.Split(' '))
   {
        int myNumber = int.Parse(token);
        // ...  do something ....
   }
}
1 голос
/ 04 июля 2011

Ваша проблема заключается в преобразовании строк в целые числа, поскольку Console.Readline всегда возвращает строку.

Существует много способов анализа нескольких целых чисел, но вам, в основном, потребуется разбить строку, используя какой-либо метод.Я не знаю, что такое Scanner в C # (но я полагаю, вам нужно найти какой-нибудь токенизатор , чтобы найти его, так как это будет стандартное имя.

Написание одногоэто не так сложно, особенно если вы ожидаете, что целые числа будут разделяться пробелами. Реализация его в методе может выглядеть примерно так:

   // Optional seperators 
   public IEnumerable<int> ParseInts(string integers, params char[] separators)
   {
       foreach (var intString in integers.Split(separators))
       {
            yield return int.Parse(intString);
       }
   }


   public IEnumerable<int> ParseInts(string integers)
   {
        return ParseInts(integers, ' ');
   }
0 голосов
/ 21 февраля 2015

Я много занимался этим на HackerRank, вот вспомогательный метод, который я использую для чтения массива целых чисел:

static int [] StringToIntArray(string s) {
    string [] parts = s.Split(' ');
    int [] arr = new int[parts.Length];
    for (int i = 0; i < arr.Length; i++) {
        arr[i] = Convert.ToInt32(parts[i]);
    }
    return arr;
} 

Вот пример чтения двух чисел в одной строке, затем двух строк с таким количеством чисел в массивы:

string [] parts = Console.ReadLine().Split(' ');
int n = Convert.ToInt32(parts[0]);
int m = Convert.ToInt32(parts[1]);
int [] a = StringToIntArray(Console.ReadLine());
int [] b = StringToIntArray(Console.ReadLine());

Пример ввода:

3 5
40 50 60
10 20 30 100 7500
0 голосов
/ 04 июля 2011

Используйте это

        string[] lines = File.ReadAllLines("Path to your file");
        foreach (string line in lines)
        {
            if (line.Trim() == "")
            {
                continue;
            }
            string[] numbers = line.Trim().Split(' ');
            foreach (var item in numbers)
            {
                int number;
                if (int.TryParse(item, out number))
                {
                    // you have your number here;
                }
            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...