Получение суммы чисел в каждой строке файла - PullRequest
0 голосов
/ 29 сентября 2011

У меня есть файл, в котором есть некоторые числа, которые я хочу суммировать с номером один с номером два в каждой строке. В моем файле есть числа:

-944 -857
-158 356
 540 70
 15 148

например, я хочу сложить -944и -857 что мне делать ??я сделал это, как в коде ниже, чтобы проверить, какие числа и выходные данные -158 и 15 (он не показывает -944 и 540 !!!):

        StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
        while (ar.ReadLine() != null)
        {
            string[] spl = ar.ReadLine().Split(' ');
            MessageBox.Show(spl[0]);

        }

Ответы [ 4 ]

4 голосов
/ 29 сентября 2011

Вы читаете строку в проверке while, а затем снова анализируете значение - вот почему кажется, что он читает только четные строки.

Предлагаемое решение:

StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
// Prepare the first line.
string line = ar.ReadLine();
while (line != null) {
    // http://msdn.microsoft.com/en-us/library/1bwe3zdy.aspx
    string[] spl = line.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries);
    MessageBox.Show(spl[0]);
    // Prepare the next line.
    line = ar.ReadLine();
}

update : используется перегрузка string.Split(), которая не возвращает пустых результатов и максимум 2 значения (1 и остальная часть строки).

3 голосов
/ 29 сентября 2011

Попробуйте это (упрощенная версия):

    StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
    while ((string line = ar.ReadLine()) != null)
    {
        string[] spl = line.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries);
        MessageBox.Show(spl[0]);
    }

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

Примечание: Вы также не обрезаете пробелы с начала строк, поэтому вы потеряете числа, если данные имеют начальные пробелы (как показано в примере).

2 голосов
/ 29 сентября 2011
    StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
    // Load a line into s
    string s = ar.ReadLine();
    while (s != null)
    {
        // Split on space
        string[] spl = s.Trim(' ').Split(' ');
        // Declare two variables to hold the numbers
        int one;
        int two;
        // Try to parse the strings into the numbers and display the sum
        if ( int.TryParse( spl[0], out one ) && int.TryParse( spl[1], out two) ) {
            MessageBox.Show( (one + two).ToString() )
        }
        // Error if the parsing failed
        else {
            MessageBox.Show("Error: Numbers were not in integer format");
        }
        // Read the next line into s
        s = ar.ReadLine();

    }
2 голосов
/ 29 сентября 2011

вы выполняете readline в вашем состоянии while и снова в теле вашего while диапазона, таким образом пропуская 1 инструкцию readline (в состоянии while). попробуйте это вместо:

StreamReader ar = new StreamReader(@"C:\Users\arash\Desktop\problem1 (3).in");
string s = ar.ReadLine();
while (s != null)
{
    //string[] spl = s.Split(' ');
    // below code seems safer, blatantly copied from one of the other answers..
    string[] spl = s.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries);
    MessageBox.Show(spl[0]);
    s = ar.ReadLine();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...