Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 27.02.2009
Сообщений: 24

Замена символа x в строке на число типа double

05.06.2012, 20:18. Показов 1392. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть строка типа string. Я пытаюсь подставить на место x в строке число типа double (chislo).
например str = "(x-1)"; chislo = 2.2654;
Передаю в функцию parse(str, chislo)
Отлаживаю функцию parse.. вроде как все правильно, возвращается (2.2654-1) видно на скрине 1, но после выхода из функции в st запиывается (2.26.... Что за хрень, полдня не могу разобраться(

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
string parse(string str, double chislo) // подстановка на место 'x' в строке числа chislo
  {
        string str2;
        strstream oss;
        oss << chislo;
        oss >> str2;
        //cout<<str2;
        string *s;
 
        int k = (str).length();
        int k2 = str2.length();
 
        int i = 0;
        while(i < k)
        {
           if ((str[i]) ==  'x') // если встречаем в строке x, то заменяем его на double chislo
           {
                string temp; //int tt
 
                for (int i2 = i + 1, tt = 0; i2 < k; i2++, tt++) // сохраняю все, что после x в temp
                {
                   temp[tt] = str[i2];
                   if (i2 < k)  temp[tt+2] = '\0';
                }
 
                for (int i2 = 0, t = i; i2 < k2; i2++, t++) // записываю на место x chislo
                   str[t] = str2[i2];
 
                //int tk = temp.length();
                int tk;
                for (tk = 0; temp[tk]!='\0'; tk++);
 
                for (int i2 = 0, t = i + k2; i2 < tk; i2++, t++) // записываю после в конец остаток строки из temp
                   str[t] = temp[i2];
 
                i += k2 - 1;
                k += k2 - 1;
                str[k] = '\0';
                //s = new string(str);
           }
           i++;
        }
        return str;//new string(str);
  }
 
  double f(double x)  // нелинейное уравнение
  {
        double s;
 
        //string str = "(pow(e, (-x))-(x-1)*(x-1))";
        string str = "(x-1)";
        string st;
        st = parse(str, 2.2654);
 
        int k=sintaks(str.c_str());
        if(k==0)
        {
           TREENODEPTR rootPtr=NULL;
           insertNode(&rootPtr,str.c_str());
           s=CalcTree(&rootPtr);
        }
 
 
        //string a="(pow(e, (-x))-(x-1)*(x-1))";
        //string a="(pow(e, (-1))-(1-1)*(1-1));";
        //string a="1+1;";
        //s = atof(a.c_str());
 
        ///*return*/s= (exp(log(e)*(-x))-(x-1)*(x-1));
        //s2 = (pow(e, (-x))-(x-1)*(x-1));
 
        //s=(pow(e, (-x))-(x-1)*(x-1));
        return s;
Миниатюры
Замена символа x в строке на число типа double   Замена символа x в строке на число типа double  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.06.2012, 20:18
Ответы с готовыми решениями:

Замена символа в строке на число соответствующему номеру по порядку вхождения этого символа в строку
В заданной строке заменить каждый символ «*» числом, соответствующим номеру по порядку вхождения этого символа в строку.

Как сгенерировать случайное число типа я double имея на входе 2 числа типа double - минимальное и максимальное
Например: public class ExtendedRandom : Random { public ExtendedRandom() : base() { ...

Возврат символа из функции типа double
Код работает, при вводе 1 7 1 2 5 0 выдаст первые пять чисел 69. Я понимаю, что из-за типа функции значение char = 'е' переводится по...

2
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.06.2012, 09:29
Возможно, заморочки со стеком параметров функции... попробуй так:
C++
1
return std::string(str);
Или работай с указателем на строку:
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
31
32
33
34
35
36
37
38
39
40
41
42
void parse(string *str, double chislo){
        string str2;
        strstream oss;
        oss << chislo;
        oss >> str2;
        //cout<<str2;
        string *s;
 
        int k = (*str).length();
        int k2 = str2.length();
 
        int i = 0;
        while(i < k)
        {
           if ((*str[i]) ==  'x') // если встречаем в строке x, то заменяем его на double chislo
           {
                string temp; //int tt
 
                for (int i2 = i + 1, tt = 0; i2 < k; i2++, tt++) // сохраняю все, что после x в temp
                {
                   temp[tt] = *str[i2];
                   if (i2 < k)  temp[tt+2] = '\0';
                }
 
                for (int i2 = 0, t = i; i2 < k2; i2++, t++) // записываю на место x chislo
                   *str[t] = str2[i2];
 
                //int tk = temp.length();
                int tk;
                for (tk = 0; temp[tk]!='\0'; tk++);
 
                for (int i2 = 0, t = i + k2; i2 < tk; i2++, t++) // записываю после в конец остаток строки из temp
                   *str[t] = temp[i2];
 
                i += k2 - 1;
                k += k2 - 1;
                *str[k] = '\0';
                //s = new string(str);
           }
           i++;
        }
}
А вообще, алгоритм так себе. Посмотри на форуме парсинг, тут примеров много - все проще делается.
0
1 / 1 / 0
Регистрация: 27.02.2009
Сообщений: 24
06.06.2012, 13:28  [ТС]
Переделал с массивом из указателей char.. все работает!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.06.2012, 13:28
Помогаю со студенческими работами здесь

Замена значения из типа double
Используется для кнопок toolStrip1. При нажатии например на кнопку Сила, Функция или Работа меняется одно значение из функции t6 = (t2 /...

Операции в строке: поиск, замена, удаление символа в строке
Доброго здравия! В ассемблере совсем новичок, поэтому прошу помощи. Программа должна получать строку с клавиатуры, получать символ,...

Как из 4-х байт, составляющих число типа double, получить это число?
Как из 4-х байт, составляющих число типа double, получить это число? Пример: unsigned char tmp={63,128,0,0}; // значение double=1.0

В заданной строке после каждого символа вставить число, соответствующее коду этого символа
В заданной строке после каждого символа вставить число, соответствующее коду этого символа. PS сделать с использованием компонента Memo

Создать структуру включающую в себя константу типа double, закрытое поле типа double
Помогите пожалуйста с заданием, создать структуру включающую в себя константу типа double, закрытое поле типа double, которому при...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru