| 
				
				Разбивка int на цифры и загрузка в список (решено)
				 | 
 | 
| Core | Дата: Вторник, 15 Сентября 2020, 20:51 | Сообщение # 1 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | Каким образом можно разбить int на отдельные цифры, и загрузить в список? На пример: было  а стало Код var list = new List<int>{8,6,7,5};  
  Игры: justcore.itch.io   Сайт: justcore.space
 
 Сообщение отредактировал Core - Суббота, 19 Сентября 2020, 12:20  |  
| 
 | 
 |    | 
| LLL | Дата: Вторник, 15 Сентября 2020, 21:01 | Сообщение # 2 |  
 
участник 
Сейчас нет на сайте 
 
 | можно ToString и Parse юзать. Ну т.е. через string это сделать.
 |  
| 
 | 
 |    | 
| Core | Дата: Вторник, 15 Сентября 2020, 21:30 | Сообщение # 3 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | LLL, Прочел документацию и все равно не представляю, как именно использовать Parse в моем случае.
  Игры: justcore.itch.io   Сайт: justcore.space
 |  
| 
 | 
 |    | 
| DivES | Дата: Вторник, 15 Сентября 2020, 21:56 | Сообщение # 4 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | Core, так а в чём, собственно, проблема? Переводишь из целочисленного типа в строковый с помощью метода ToString(). Затем хотя бы тем же циклом с перебором заполняешь свой список символами из строки (учитывая, что строка — коллекция символов; доступ осуществляется по []). Всё же в течение пары минут нагугливается.   метод ToString(), сам String
 |  
| 
 | 
 |    | 
| drcrack | Дата: Вторник, 15 Сентября 2020, 23:01 | Сообщение # 5 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | Код var a = 87650000; var list = new List<int>(16);
  while(a > 0) {   list.Insert(0, a % 10);   a /= 10; }
  
  (Список сразу аллоцируется на 16 элементов — ближайшая степень двойки к максимальному числу цифр в int)
  PS Кто-то скажет что лучше использовать Add и потом сделать Reverse, но на мой взгляд, это не особо нужная микрооптимизация которая толком ничего не ускоряет и портит семантику этого куска кода. Хотя, если это все обернуть в метод, можно сделать и с Reverse.
 
 Сообщение отредактировал drcrack - Вторник, 15 Сентября 2020, 23:11  |  
| 
 | 
 |    | 
| Core | Дата: Среда, 16 Сентября 2020, 17:53 | Сообщение # 6 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | DivES, Те к символам из стринга можно обратиться с помощью []?
 Код      class Program     {         public static string FakeBin(string x)         {             var list = new List<int> { };             foreach (var i in x)                 Console.WriteLine(x[i]);//тут :p             return x;         }         public static void Main(string[] args)         {             FakeBin("987987");             Console.ReadKey();         }     }
 
  У меня пишет, что индекс вне границ массива
  Игры: justcore.itch.io   Сайт: justcore.space
 
 Сообщение отредактировал Core - Среда, 16 Сентября 2020, 17:54  |  
| 
 | 
 |    | 
| DivES | Дата: Среда, 16 Сентября 2020, 20:35 | Сообщение # 7 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | Core, ты вообще понял, что ты сделал?   Не отвечай, знаю, что не понял.
  Для каждого i в x, где x — строка. А значит что? Правильно, i будут символами. И что же ты делаешь дальше? Пытаешься обратиться по индексу (i), который является первым символом твоей строки. А там что? Девятка. А массив какой длины? Шесть. Ну нельзя же так. Два варианта:
 Код  foreach (var i in x)     list.Append(i);
 
  или
 Код  for (int i = 0; i < x.Length(); ++i)     list.Append(x[i]);
 
  где Length() возвращает длину строки, а Append() — добавляет элемент к списку.
  Без обид, надеюсь. Просто ты должен был использовать один из способов, а использовал оба. foreach как раз ведь и применяется, чтобы с индексами не возиться.  
 
 Сообщение отредактировал DivES - Среда, 16 Сентября 2020, 20:41  |  
| 
 | 
 |    | 
| Core | Дата: Среда, 16 Сентября 2020, 21:14 | Сообщение # 8 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | DivES, Спасибо за то, что уделяешь время таким нубам как я. Без шуток, ты - один из лучших обитателей gcup!   
  Свою ошибку понял и исправил. Все работает как нужно
  Игры: justcore.itch.io   Сайт: justcore.space
 |  
| 
 | 
 |    | 
| drcrack | Дата: Четверг, 17 Сентября 2020, 12:46 | Сообщение # 9 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | Цитата  Пытаешься обратиться по индексу (i), который является первым символом твоей строки. А там что? Девятка. А массив какой длины? Шесть.  Был бы массив размером больше 9, все равно не помогло бы, т.к. у девятки ASCII код 57, а именно он и используется в качестве индекса в этом случае  
 |  
| 
 | 
 |    | 
| Core | Дата: Четверг, 17 Сентября 2020, 16:26 | Сообщение # 10 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | Цитата drcrack (  )   у девятки ASCII код 57  Кстати, на счет этого...
 Код  namespace ConsoleApplication1 {     class Program     {         public static string FakeBin(string x)          {             var y = ""; //Результат             var bufOut = "";//Для конвертации в string             int buf = 0;//Для конвертации в int, и всех последующих операций             foreach (var i in x){                 buf = Convert.ToInt32(i);//Конвертируем входные данные в int, и записываем в buf                 Console.WriteLine("i:"+i);//ДЕБАГ Вывод символа, который находится в i (входные данные)                 Console.WriteLine("buf:"+buf);//ДЕБАГ Вывод того, что записалось в buf, после конвертации i в int                  if (buf >= 5) { buf = 1; } else { buf = 0; }//Проверка значения цифры. Если больше, или равно 5, то заменяем содержимое на 1, иначе на 0                 bufOut = Convert.ToString(buf);//Конвертируем все данные обратно в string                 y += bufOut;//Складываем все в один string (y)             }             Console.WriteLine("");//Отступ             Console.WriteLine("Output: "+y);//Вывод выходных данных             return y;//Возвращаем Выходные данные         }         public static void Main(string[] args)          {             FakeBin("52744248"); //В данном случае, выходные данные должны быть 10100001             Console.ReadKey();//Ожидание нажатия любой клавиши.         }     } }
 
 
  Пытаюсь сделать что-то вроде генератора поддельного двоичного кода. В buf записывается код ASCII, а по задумке, там должна храниться цифра из стринга. Может есть функция, которая преобразовывает ASCII код цифры в саму цифру?
  Игры: justcore.itch.io   Сайт: justcore.space
 |  
| 
 | 
 |    | 
| drcrack | Дата: Четверг, 17 Сентября 2020, 22:24 | Сообщение # 11 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | Цитата  Может есть функция, которая преобразовывает ASCII код цифры в саму цифру? 
  Вот это все:
 Код buf = Convert.ToInt32(i);//Конвертируем входные данные в int, и записываем в buf                 Console.WriteLine("i:"+i);//ДЕБАГ Вывод символа, который находится в i (входные данные)                 Console.WriteLine("buf:"+buf);//ДЕБАГ Вывод того, что записалось в buf, после конвертации i в int                 if (buf >= 5) { buf = 1; } else { buf = 0; }//Проверка значения цифры. Если больше, или равно 5, то заменяем содержимое на 1, иначе на 0                 bufOut = Convert.ToString(buf);//Конвертируем все данные обратно в string                 y += bufOut;//Складываем все в один string (y) 
  Делается одной строчкой:
 Код y += (char) ('0' + (i - '0') / 5); 
  PS Если это делается часто, лучше использовать StringBuilder чтобы не плодить новые строки на каждой итерации (каждый лишний обьект приближает сборку мусора, а также замедляет ее)
 
 Сообщение отредактировал drcrack - Четверг, 17 Сентября 2020, 22:37  |  
| 
 | 
 |    | 
| Core | Дата: Пятница, 18 Сентября 2020, 15:58 | Сообщение # 12 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | Цитата drcrack (  )   Делается одной строчкой:  Не очень понимаю такой синтаксис. Можно подробнее рассказать о том, что за что отвечает? :'p
  Игры: justcore.itch.io   Сайт: justcore.space
 
 Сообщение отредактировал Core - Пятница, 18 Сентября 2020, 15:59  |  
| 
 | 
 |    | 
| drcrack | Дата: Пятница, 18 Сентября 2020, 16:56 | Сообщение # 13 |  
| 
 старожил 
Сейчас нет на сайте 
 
 | i - '0' возвращает разницу между символом i и символом 0 для цифр это совпадает с их числовым значением т.к. они идут подряд начиная с '0' далее это делится на 5 челочисленным делением, что для 0-4 дает 0, а для 5-9 дает 1 далее к '0' прибавляется то что получилось (0 или 1), получается либо '0' либо следующий символ т.е. '1' ну и (char) конвертирует результат в символ т.к. после сложения '0' с числом получится число и если убрать (char) то в строке будут ascii коды
 
 Сообщение отредактировал drcrack - Пятница, 18 Сентября 2020, 16:57  |  
| 
 | 
 |    | 
| Core | Дата: Пятница, 18 Сентября 2020, 17:49 | Сообщение # 14 |  
 
заслуженный участник 
Сейчас нет на сайте 
 
 | drcrack, Спасибо за помощь. =)
  Игры: justcore.itch.io   Сайт: justcore.space
 |  
| 
 | 
 |    | 
| OpenGOO | Дата: Суббота, 19 Сентября 2020, 10:54 | Сообщение # 15 |  
 
почти ветеран 
Сейчас нет на сайте 
 
 | вот ещё вариант
 Код      int value = 8765;     var list = new List<int>();     while (true) {         int remainder;         value = Math.DivRem(value, 10, out remainder);         list.Insert(0, remainder);         if (value == 0) {             break;         }     }
  
  Мои проекты:   - Свободный и открытый клон World Of Goo   - TrueEngine2D (2D игровой фреймворк основанный на FreeBASIC) 
   [GameMaker: Studio v1.4.9999]
 |  
| 
 | 
 |    |