Index was outside the bounds of array - C#

Узнай цену своей работы

Формулировка задачи:

Пытаюсь сделать лексер, получаю такую ошибку в строке 46. Вот дословный код:
Листинг программы
  1. public class Lexer
  2. {
  3. public static int last_id = 0;
  4. public static int tokens_number = 0;
  5. public static bool in_string = false;
  6. public Lexer ()
  7. {
  8. }
  9. public static int Tokenize(char[] text, string tokens, string[] out_buffer)
  10. {
  11. for (int i_text = 0; i_text < text.Length; i_text++) // Обходим текст
  12. {
  13. for (int i_token = 0; i_token < tokens.Length; i_token++) // Обходим токены
  14. {
  15. if (text [i_text] == tokens [i_token]) // Если символ текста - токен
  16. {
  17. if (tokens_number != 0 && out_buffer[tokens_number - 1] != "\\" && (text[i_text] == '\"' || text[i_text] == '\'')) in_string = !in_string; // Если встретилась кавычка без слеша, меняем состояние: мы сейчас в кавычках/вне кавычек
  18. for (int i_buffer = 0, i_char = 0; i_char <= i_text - last_id;) // Обходим все символы, начиная с последнего записанного + 1, и заканчивая текущим
  19. {
  20. if (i_char != i_text - last_id) // Если до самого токена не долши
  21. {
  22. out_buffer[tokens_number] += text[last_id + i_char].ToString(); // Записываем символ в буфер
  23.  
  24. //if (((IS_NOT_SPACE(text[last_id + itext])) && !we_in_string) || we_in_string)
  25. //{
  26. // out_buffer[tokens_number][ibuffer] = text[last_id + itext] ;// Записываем символ в буфер
  27. // ++ibuffer;
  28. // ++itext;
  29. //}
  30. //else
  31. ++i_buffer;
  32. ++i_char;
  33. }
  34. else // Если дошли
  35. {
  36. tokens_number++; // Выделяем отдельное место для токена
  37. out_buffer[tokens_number] += text[i_text].ToString(); // И записываем его
  38. }
  39. }
  40. tokens_number++;
  41. last_id = i_text + 1;
  42. }
  43. }
  44. }
  45. return 0;
  46. }
  47. }
  48. class MainClass
  49. {
  50. public static void Main (string[] args)
  51. {
  52. char[] text = new char[1024];
  53. text = ("using System;\n\nnamespace MONOCX\n{\n\tclass MainClass\n\t{\n\t\tpublic static void Main (string[] args)\n\t\t{\n\t\t\tConsole.WriteLine (\"Hello World!\");\n\t\t\tchar[] = \"test.text() ? 1 : --0;\"\n\t\t}\n\t}\n}").ToCharArray();
  54. string tokens = " \n\r\t\v\"\'()[]{}!@#$:;.,/?%^&*-=+|";
  55. string[] out_buffer = new string[1024];
  56. Lexer.Tokenize(text, tokens, out_buffer);
  57. Console.WriteLine (out_buffer);
  58. }
  59. }
Кто подскажет? В чём моет быть проблема? Какого чёрта он за пределами буфера, если раззмер text = 1024, как и string, не меньше 5. Снимок со значениями всех переменных и местом возникновения исключения прилагается. P.S.: tokens_number == 1

Решение задачи: «Index was outside the bounds of array»

textual
Листинг программы
  1.                         for (int i_buffer = 0, i_char = 0; i_char <= i_text - last_id;) // Обходим все символы, начиная с последнего записанного + 1, и заканчивая текущим
  2.                         {
  3.                             if (i_char != i_text - last_id)                                       // Если до самого токена не долши
  4.                             {
  5.                                 out_buffer[tokens_number] += text[last_id + i_char].ToString(); // Записываем символ в буфер
  6.  
  7.                                 ++i_buffer;
  8.                                 ++i_char;
  9.  
  10.                             }
  11.                             else                                                            // Если дошли
  12.                             {
  13.                                 tokens_number++;                                            // Выделяем отдельное место для токена
  14.  
  15.                                 out_buffer[tokens_number] += text[i_text].ToString();       // И записываем его
  16.                             }
  17.                         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы