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

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

22.04.2017, 20:22. Показов 4854. Ответов 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
13834 / 7876 / 1705
Регистрация: 25.05.2015
Сообщений: 23,918
Записей в блоге: 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
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
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
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
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
14748 / 9523 / 1364
Регистрация: 21.01.2016
Сообщений: 35,917
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
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru