Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/21: Рейтинг темы: голосов - 21, средняя оценка - 5.00
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465

Cоздать указатель типа char в классе

22.04.2017, 20:22. Показов 4939. Ответов 26

Студворк — интернет-сервис помощи студентам
Доброго времени суток, форумчане!

Пытаюсь создать указатель типа char в классе, что бы потом он ссылался на char массив, но C# выдаёт ошибку.
Почему? Как это исправить? В С++ таких ошибок не выдавало.

C#
1
2
3
4
5
6
7
8
class kalculiator
        {
           public enum typesT { UNDEFTOK, OPERATOR, NUMBER, VAREBAL};
           public enum errorsT { SERROR, PARENS, NOEXP, DIVZERO };
 
           char* exp_ptr; //Выдаёт ошибку
            char [] token=new char[70];
            typesT tok_type;
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.04.2017, 20:22
Ответы с готовыми решениями:

Аргумент типа const char* несовместим с параметром типа char* в классе
Данную ошибку находит в 74 - 76 строках, не могу понять что не так. #include <iostream> #include <iomanip> using namespace std;...

Объявить в классе-наследнике указатель, указывающий туда же, куда указывает указатель в классе-родителе
Здравствуйте. Имеется базовый класс MainWindow: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include "globaltime.h" class...

Указатель на поле типа char []
Всем добрый день! Ситуация такая: есть класс, в нём есть поля типа char и метод, работающий с этими полями. Метод должен многократно по...

26
Эксперт .NET
 Аватар для Rius
13853 / 7895 / 1707
Регистрация: 25.05.2015
Сообщений: 23,963
Записей в блоге: 14
27.04.2017, 09:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Vlad__i__mir Посмотреть сообщение
Ваш вариант не понял, можно прокомментировать, что данный код делает
Исходная строка.
С помощью регулярного выражения получаются все скопления цифр в строке.
И выводятся на консоль.

Не по теме:

В книге Полный справочник по C# Шилдта в главе 26 описан синтаксический анализатор.

0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
29.04.2017, 12:51  [ТС]
Цитата Сообщение от Diamante Посмотреть сообщение
, имхо, лучше всего подойдет регулярное выражение
Спасибо, но в моём случае это не подходит, так как мне нужно считать не сразу все числа, а именно разбить выражения на лексемы и последовательно передавать их как единое целое. Решил это сделать с помощью строки, обнуляя её каждый раз при считывании новой лексемы:
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
public void get_token()
            {
                               
                token = "";
                tok_type = typesT.UNDEFTOK; //обнуление типа для анализа следующей лексемы
                
                if (iter==exp_ptr.Length) return;
 
 
                if (exp_ptr.IndexOfAny(operators_deistviy, iter, 1) > -1) 
                { //ищет нужный оператор в массиве
                    tok_type = typesT.OPERATOR;
                    token=token+exp_ptr[iter]; iter++;
                }
                
                else if ((int)exp_ptr[iter]>=97 && (int)exp_ptr[iter]<=122)
                { 
                    while (!isdelim(exp_ptr[iter])) //проверка на разделитель
                    { token = token + exp_ptr[iter]; iter++;}
                tok_type= typesT.VARIABLE; }
                
                else if ((int)exp_ptr[iter] >= 48 && (int)exp_ptr[iter] <= 57)
                {
                    while (iter < exp_ptr.Length && !isdelim(exp_ptr[iter]))
                    { token = token + exp_ptr[iter];
                     iter++;}
                    tok_type = typesT.NUMBER;
                }
               
            }
Ваш приём удалось использовал в другой задаче
0
Эксперт .NET
 Аватар для Usaga
14804 / 9577 / 1368
Регистрация: 21.01.2016
Сообщений: 36,085
29.04.2017, 14:12
Цитата Сообщение от Vlad__i__mir Посмотреть сообщение
Спасибо, но в моём случае это не подходит, так как мне нужно считать не сразу все числа, а именно разбить выражения на лексемы и последовательно передавать их как единое целое. Решил это сделать с помощью строки, обнуляя её каждый раз при считывании новой лексемы
Вы к совету об использовании итераторов не прислушались, как я посмотрю.
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
29.04.2017, 14:21  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Вы к совету об использовании итераторов не прислушались, как я посмотрю.
Прислушаться прислушался, но пока к сожалению не освоил
0
Эксперт .NET
 Аватар для Usaga
14804 / 9577 / 1368
Регистрация: 21.01.2016
Сообщений: 36,085
29.04.2017, 14:28
Vlad__i__mir, так у вас как раз подходящая тема, чтобы потренироваться. Если вас никто не гонит, то можно было бы освоить данный подход на вашей текущей задаче.
0
6 / 6 / 1
Регистрация: 04.01.2017
Сообщений: 465
29.04.2017, 23:50  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Vlad__i__mir, так у вас как раз подходящая тема, чтобы потренироваться. Если вас никто не гонит, то можно было бы освоить данный подход на вашей текущей задаче.
Решил попробовать IEnumerator в своей задаче. Столкнулся с такой проблемой, что у меня один элемент алгоритм перескакивает, так как для запуска сразу после объявления данной функции нужно сразу задать движение -
C#
1
2
3
IEnumerator<char> simbol = exp_ptr.GetEnumerator();
                
               if (!simbol.MoveNext()) return;
и далее в цикле по алгоритму тоже происходит смещение:
C#
1
2
3
4
5
6
else if ((int)simbol.Current >= 48 && (int)simbol.Current <= 57)
                { //проверяет на принадлежность к числу
                    while (!isdelim(simbol.Current))
                    { token = token + simbol.Current; simbol.MoveNext();}
                    tok_type = typesT.NUMBER;
                }
Поэтому когда данная функция повторно вызывается (а она вызывается несколько раз для одной и той же строки) происходит скачок через один элемент.
Метода, который возвращал бы на один элемент назад не нашёл. Не знаю как тут быть. Может быть вы подскажите.
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
public void get_token()
            {
                token = "";
                tok_type = typesT.UNDEFTOK;
 
                IEnumerator<char> simbol = exp_ptr.GetEnumerator();
                
               if (!simbol.MoveNext()) return;
                
 
                if (exp_ptr.IndexOfAny(operators_deistviy, iter, 1) > -1) //
                { //ищет нужный оператор в массиве
                    tok_type = typesT.OPERATOR;
                    token=token+ simbol.Current;
                }
                
                else if ((int)simbol.Current>=97 && (int)simbol.Current <= 122)
                { //проверка на принадлежность к букве алфавита
                    while (!isdelim(simbol.Current)) //проверка на разделитель
                    { token = token + simbol.Current;}
                tok_type= typesT.VARIABLE; }
                
                else if ((int)simbol.Current >= 48 && (int)simbol.Current <= 57)
                { //проверяет на принадлежность к числу
                    while (!isdelim(simbol.Current))
                    { token = token + simbol.Current; simbol.MoveNext();}
                    tok_type = typesT.NUMBER;
                }
               
            }
0
Эксперт .NET
 Аватар для Usaga
14804 / 9577 / 1368
Регистрация: 21.01.2016
Сообщений: 36,085
30.04.2017, 05:15
Vlad__i__mir, что-то я недопонял кто и что у вас "перепрыгивает". Код - дрянь полная. Ваш лексический анализатор нужно переписать: вынести в отдельный класс (можно тоже оформить в виде итератора), передавать ему на вход StreamReader или IEnumerable<char> и последовательно получать от него лексемы (в виде класса или структуры).

Т.е. итератор или ридер должен вашему коду передаваться извне. Никакие "перемотки назад" не нужны.

Добавлено через 58 секунд
И не используйте "магические числа" в коде! Используйте константы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2017, 05:15

Cоздать файл OLD.T из элементов типа char с помощью цикла repeat, признак выхода из цикла символ (!)
Построить программу в лазарусе, которая создает файл OLD.T из элементов типа char с помощью цикла repeat, признак выхода из цикла символ...

Как считать значения типа char* в классе
В общем у меня есть класс, в котором создаются объекты и некоторые параметры должны записываться в char*.Пытался InputBox'ом,костыли...

Поиск объекта в классе по строке типа char
Есть такая задача : Описать класс с именем PRICE, содержащий следующие поля: - название товара; - название магазина, в котором...

Передать указатель типа char с последним символом 0
В функцию WriteFiĺe передаю строку( общаюсь по сом порту).Собираю сообщение и подсчитывал контрольную сумму(2 байта),а потом шлю отправляю...

Сохранение/Загрузка указателя на указатель типа char
char **data = new char*; Подскажите, пожалуйста, как записать содержимое всего выше написанного в файл в двоичном виде, а также,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru