Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
Dialord
Новичок
8 / 8 / 1
Регистрация: 14.01.2010
Сообщений: 32
14.01.2010, 15:45     Преобразование string в int   #1
Здравствуйте, прошу помощи со следующей проблемой: при считывании массива чисел из текстового файла и преобразования его из строки в Int, числа получаются некорректные. Вот код:
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
private void button1_Click(object sender, EventArgs e)
{
      System.IO.StreamReader data_trance = new System.IO.StreamReader("H:\\test.txt");
      string str = data_trance.ReadLine();
      int kol = str.Length;
      int x = 0;
      int znak = 0;
      int i;
      int j = 0;
      int p = 0;
      int [] mas = new int[4];
      for (i = 0; i < 4; i++)
      { mas[i] = 0;
      }
      for (i = 0; i < kol; i++)
      { if (str[i] == '-')
            { znak = 1;
            }
      else
      { if (str[i] != ' ')
            { j = Convert.ToInt32( str[i]);
            x = x * 10+j;
            }
        else
            { if (znak != 0)
                  { mas[p] = 0 - x;
                     znak = 0;
                     x = 0;
                     p++;
                  }
              else
                  { mas[p] = x;
                     x = 0;
                     p++;
                  }
            }
      }
      }
}
Подскажите, что не так. Этот код нужен для программы к курсовому проекту. так что время поджимает. За ранее благодарен откликнувшимся!
AdAgent
Объявления
14.01.2010, 15:45    Преобразование string в int
SSV
Заблокирован
14.01.2010, 16:17     Преобразование string в int   #2
Напиши полностью условие задачи, а то у тебя здесь многое не понятно. Например, зачем заполнять массив нулями, если в нем и так нули после объявления
Цитата Сообщение от Dialord Посмотреть сообщение
int [] mas = new int[4];
for (i = 0; i < 4; i++)
{ mas[i] = 0;
}
Dialord
Новичок
8 / 8 / 1
Регистрация: 14.01.2010
Сообщений: 32
14.01.2010, 16:48  [ТС]     Преобразование string в int   #3
Да, здесь ты прав - это действительно лишнее. Задача как таковая заключается в том, чтобы считать исходные данные из текстового файла. Это лишь кусочек всей программы. В текстовом файле находятся коэффиценты системы уравнений. Уже 6 часов просидел с, казалось бы, элементарным кодом, но никак не могу осуществить задуманное. На C# только перехожу, раньше на С++ писал.

Добавлено через 6 минут
Я тут пришел к решению проблемы, хоть и коряво, но работает. Сделал следущее: заменил оператор
Код C#
1
j = Convert.ToInt32( str[i]);
на такой
Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
                        switch (str[i])
                        {
                            case '0': j = 0; break;
                            case '1': j = 1; break;
                            case '2': j = 2; break;
                            case '3': j = 3; break;
                            case '4': j = 4; break;
                            case '5': j = 5; break;
                            case '6': j = 6; break;
                            case '7': j = 7; break;
                            case '8': j = 8; break;
                            case '9': j = 9; break;
                        }                  
может и убого, зато работает. Вот правда если туда другой символ пролезет - будет error )) Может default еще прикрутить?
P.S. Если кто может предложить что-то дельное - буду только рад.
mitsky
Форумчанин
31 / 31 / 7
Регистрация: 31.12.2009
Сообщений: 82
14.01.2010, 17:08     Преобразование string в int   #4
а чем вас int.TryParse() не устраивает?
hardworker
Форумчанин
14 / 14 / 1
Регистрация: 12.01.2010
Сообщений: 51
14.01.2010, 17:17     Преобразование string в int   #5
Код C#
1
2
3
4
5
6
7
8
            System.IO.StreamReader data_trance = new System.IO.StreamReader("C://test.txt");
 
            string str = data_trance.ReadLine();
            string[] numbers_in_string = str.Split(' ', '\n'); // Разбиваем текст файла на строки между знаками ' ' И переноса строки '\n'
            int[] numbers = new int[numbers_in_string.Length]; 
 
            for(int j = 0; j < numbers_in_string.Length; j++)
                numbers[j] = Convert.ToInt32(numbers_in_string[j]);
А с помощью TryParse можно проверить правильность информации в хранимом файле
AdAgent
Объявления
14.01.2010, 17:17    Преобразование string в int
Dialord
Новичок
8 / 8 / 1
Регистрация: 14.01.2010
Сообщений: 32
14.01.2010, 17:18  [ТС]     Преобразование string в int   #6
Цитата Сообщение от mitsky Посмотреть сообщение
а чем вас int.TryParse() не устраивает?
А можно поподробнее с этого места, как именно оператор работает?
Dialord
Новичок
8 / 8 / 1
Регистрация: 14.01.2010
Сообщений: 32
14.01.2010, 17:23  [ТС]     Преобразование string в int   #7
hardworker, спасибо огромное! Отличное предложение, с Вашего позволения я его и использую.
mitsky
Форумчанин
31 / 31 / 7
Регистрация: 31.12.2009
Сообщений: 82
14.01.2010, 17:40     Преобразование string в int   #8
TryParse преобразует строку в эквивалентное ей число со знаком. метод вернет нужное вам значение если преобразование было успешным либо нул в случае неудачи. конкретнее можно посмотреть в мсдн.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2011, 06:57    Преобразование string в int

Еще ссылки по теме:

C# преобразование string в int

C# преобразование типа string в int

C# Ошибка при изменении с int на string - преобразование невозможно

C# Преобразование типов String в int

aleks_pilipenko
)))
593 / 170 / 7
Регистрация: 31.12.2009
Сообщений: 2,122
Записей в блоге: 1
06.05.2011, 06:57     Преобразование string в int   #9
Код C#
1
2
3
            string str = Encoding.ASCII.GetString(bytesP);
            byte[] Bytes = Encoding.ASCII.GetBytes(str);
            string sss = Encoding.ASCII.GetString(Bytes);
Yandex
Объявления
06.05.2011, 06:57    Преобразование string в int
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему
Опции темы

Текущее время: 07:42. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.