Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по символьной строке 
:(
    Опции темы
Гость_Shorr Kan
Дата 31.5.2005, 19:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У меня возникла проблема с символьной строкой. Из Edit считываю строку - мне всегда казалось, что это массив. А компилятор говорит, что не может перевести INT в CHAR.... В чем может быть дело?
  Вверх
Guest
Дата 31.5.2005, 19:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Т.е., считываю первый элемент массива, а он говорит, что ошибка перевода INT в CHAR
  Вверх
Mayk
Дата 31.5.2005, 19:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Странный компилятор... Int в char по жизни переводится без проблем.
А можно посмотреть проблемный участок кода?


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
bel_nikita
Дата 31.5.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



код в студию! smile


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Гость_Shorr Kan
Дата 1.6.2005, 04:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вот так я объявил строку в конструкторе
Код

char cFormula[256];



А это происходит по нажатию кнопочки...
Код


   char buf[256]="";
   char buf1[256]="";
   
   EditFormula->GetLine(cFormula, 256, 0);
   strcpy(buf1,cFormula);
   ListBox->ClearList();
   //EditFormula->Clear();

   int len=strlen(cFormula);
   if(len==0){
      MessageBox("Не набрана формула!","Ошибка",MB_OK|MB_ICONINFORMATION);
   }else{

      //ListBox->AddString(cFormula);
      int count_skoba = 0;
      for(int i=0;i<len;i++)
      {
         //itoa(i,buf1,10);

         ListBox->AddString(cFormula[i]);
         
         //count_skoba = count_skoba +1;
       
      }


Хотелось разделить ее побуквенно, и закинуть в listbox... Вот cFormula[i] не могу прочесть. Пишет - Cannot convert int to const char *. Компилятор - Borland 5.02
  Вверх
Mayk
Дата 1.6.2005, 05:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Не стоит путать char с char* - это совершенно разные типы.
Код

      for(int i=0;i<len;i++)
      {
         char tmp[2] = {cFormula[i],0}; 
         //itoa(i,buf1,10);
         ListBox->AddString(tmp);
         
         //count_skoba = count_skoba +1;
       
      }

должен спасти мир.

Это сообщение отредактировал(а) Mayk - 1.6.2005, 05:28


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Guest
Дата 1.6.2005, 10:32 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Дело вот в чем:
есть формула вида (a+b)*c
надо разобрать формулу по частям
(a+b)
результат*с
Пока придумал вариант посимвольно искать круглую скобу и вырезать ее...
Может кто подскажет вариант поинтереснее?

А конструкция вида:
Код

====
char str[2];
str[0] = cFormula[i];
str[1] = 0;
ListBox->AddString(str);
====
работает, спасибо, правда работает странно, ожидал несколько другого эффекта
если передать туда строку 2+4 выводит:
======= 
+
2
4
========


Откуда такой эффект?
  Вверх
ManiaK
Дата 1.6.2005, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Homo Sapience
***


Профиль
Группа: Комодератор
Сообщений: 1145
Регистрация: 3.8.2004
Где: ИУ5-93

Репутация: 5
Всего: 29



Эк ты залез в дебри... тут тебе скорей всего надо Рекурсивно-Нисходящий алгоритм реализовывать. А это дело не пятиминутное и требует достаточно высокого уровня знаний по языку...

Вот ссылочка по теории:
http://algolist.manual.ru/syntax/parsear.php
PM MAIL WWW   Вверх
segmentation_fault
Дата 1.6.2005, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 82
Регистрация: 14.2.2005
Где: в интернете

Репутация: 1
Всего: 1



Если ты точно знаешь формат твоей формулы, например если формат всегда будет c(a+b) то можно сделать так:
читаешь с начала строки символы и пока символы являются цифрами записываешь их в переменную c. потом игнорируешь следующий символ (это будет '(' ) и потом опять пока идут цифры записываешь их в переменную a. Опять же игнорируешь следующий '+' и записываешь всё до символа ')' в b. И потом просто вычисляешь формулу.
Вариант конечно гораздо хуже нормальных алгоритмов разбора зато проще некуда.
PM MAIL   Вверх
AISIN
Дата 1.6.2005, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 185
Регистрация: 27.1.2005
Где: Пушкино

Репутация: нет
Всего: 1



Цитата(Guest @ 1.6.2005, 10:32)
Дело вот в чем:
есть формула вида (a+b)*c
надо разобрать формулу по частям
(a+b)
результат*с
Пока придумал вариант посимвольно искать круглую скобу и вырезать ее...
Может кто подскажет вариант поинтереснее?
Откуда такой эффект?

Анализируешь каждый символ выставляешь приоритеты выполнения команд и потом переводишь символы в цифры и находишь свое арифмитическое выражение согласно выставленным приоритетам!
--------------------
Внимание!!! Внимание!!!Запущена программа по завоеванию мира!!!Выполненно 0,000000000000000000000000000000000000000000000000000002%
PM MAIL   Вверх
Любитель
Дата 7.6.2005, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 24
Всего: 92



Для любого выражения я использовал такой разбор:
1. Функция разбирает бинарную операцию (поиском её в строке и удалением лишних пробелом).
2. Функция разбирает выражения без скобок (использую функцию 1). Заметим, что любое выражение без скобок состоит из чередующихся операндов и операций и заносим их в массивы, отдельно ставим флаг, есть ли вначале знак операции (унарной). Создаём также 3ий массив - приоритет операций (он может вычисляться отдельной функцией). Затем пока значение максимального элемента в последнем массиве (я использовал STL) > 0 вызываем предыдущую функцию с соответствующими параметрами. Обнуляем элемент последнего массива.
3. Функция разбора любого выражения. Принцип в том, что ищем самые внутренние скобки. Я ещё делал скобки для функций (если перед скобками имя функции стоит, а не операция).

ЗЫ. Я так делал (чисто учебный, естественно) свой скриптовый язык. Мой 'экзамен' в 11 классе. Кому интересно могу написать (хотя, наверно, наиболее интересно мне smile ) smile


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.