Форум программистов, компьютерный форум CyberForum.ru

Строку в число - C++

Восстановить пароль Регистрация
 
Дима-Дима
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 63
16.04.2011, 09:44     Строку в число #1
Есть фаил с выражением, например (22.3+69-69*98+23.5)
Как считатать из него так, чтоб отделять отдельна целиком числа, отдельна знаки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.04.2011, 09:44     Строку в число
Посмотрите здесь:

Преобразовать число в строку/строкук в число C++
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. C++
Число в строку C++
C++ Программа на С, которая вводит число типа int с клавиатуры, преобразует ее в строку (str), выводит на дисплей число и строку.
C++ Преобразовать строку->число->строку
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.04.2011, 10:47     Строку в число #2
посимвольно
кури польскую запись
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 301
16.04.2011, 11:05     Строку в число #3
Считываешь посимвольно с условием - если *,/,+ или - то заносишь как символ, а если другой то записываешь в строку а потом преобразовываешь в число, с помощью StrToInt или через метод string.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.04.2011, 11:09     Строку в число #4
Цитата Сообщение от FroL Посмотреть сообщение
StrToInt
это тебе не дельфи)
Дима-Дима
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 63
16.04.2011, 11:11  [ТС]     Строку в число #5
А можно отрывок кода, чтоб разобраться наглядно?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.04.2011, 11:15     Строку в число #6
там немаленький код, я писал до НГ перевод в польскую запись и последующее вычисление
пиши в аську насчет этого, тут проекты запрещается выкладывать.. (
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 301
16.04.2011, 11:24     Строку в число #7
Цитата Сообщение от sandye51 Посмотреть сообщение
это тебе не дельфи)
Не делфи, но работает. Если не веришь - проверь.
На счет кода:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <fstream.h>
main()
{
  ifstream file("C:\\text.txt"); 
 
  string stroka, temp = "", symvol;
  stroka<<file;//читаем первую строку;
 
  for(int i = 0; i < stroka.length(); i++)
  {
    if(stroka[i] == '*' | stroka[i] == '//' | stroka[i] == '+' | stroka[i] == '-') symvol = stroka[i];//если символ
    else temp += stroka[i];//если число, то добавляем в буфер.
  }
  
  int x = atoi(temp.c_str());//переводим строку в инт
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
16.04.2011, 11:34     Строку в число #8
Дима-Дима,
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
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/lexical_cast.hpp>
 
bool isOperator(char character) {
  return boost::is_any_of("+-*/")(character);
}
 
std::string removeWhitespaces(const std::string& text) {
  std::string result;
  
  for (std::string::const_iterator it = text.begin(); it != text.end(); ++it)
     if ((*it) != ' ')
        result.push_back(*it);
  
  return result;
}
 
std::vector<double> extractOperands(const std::string& expression) {
  std::vector<std::string> operands;
  
  boost::split(operands, expression, isOperator);
    
  std::vector<double> result;
  for (std::vector<std::string>::const_iterator it = operands.begin(); it != operands.end(); ++it)
     result.push_back(boost::lexical_cast<double>(removeWhitespaces(*it)));
  
  return result;
}
 
std::vector<char> extractOperators(const std::string& expression) {
  std::vector<char> result;
  
  for (std::string::const_iterator it = expression.begin(); it != expression.end(); ++it)
     if (isOperator(*it))
        result.push_back(*it);
  
  return result;
}
 
int main() {
  std::string expression = "22.3 + 69 - 69 * 98 + 23.5";
  
  std::vector<double> operands  = extractOperands (expression);
  std::vector<char>   operators = extractOperators(expression);
  
  for (std::vector<double>::const_iterator it = operands.begin(); it != operands.end(); ++it)
    std::cout << *it << " ";
    
  std::cout << std::endl;
  
  for (std::vector<char>::const_iterator it = operators.begin(); it != operators.end(); ++it)
    std::cout << *it << " ";
}
Результат: http://liveworkspace.org/code/54108a...8163f601cef8d8

Цитата Сообщение от sandye51 Посмотреть сообщение
тут проекты запрещается выкладывать..
Это кто Вам такое сказал?
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 301
16.04.2011, 11:37     Строку в число #9
CyBOSSeR, мой вариант хоть и сырее и не полный, но он проще для понимания
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.04.2011, 11:45     Строку в число #10
CyBOSSeR, ни раз уже мои так удаляли
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
16.04.2011, 12:14     Строку в число #11
Так кошернее будет:
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
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <iterator>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/foreach.hpp>
#include <boost/lexical_cast.hpp>
 
bool isOperator(char character) {
  return boost::is_any_of("+-*/")(character);
}
 
std::string trim(const std::string& text) {
  std::string result = text;
  
  boost::trim(result);
  
  return result;
}
 
double toDouble(const std::string& text) {
  return boost::lexical_cast<double>(trim(text));
}
 
std::vector<double> extractOperands(const std::string& expression) {
  std::vector<std::string> operands;
  boost::split(operands, expression, isOperator);
    
  std::vector<double> result;
  std::transform(operands.begin(), operands.end(), std::back_inserter(result), toDouble);
  
  return result;
}
 
std::vector<char> extractOperators(const std::string& expression) {
  std::vector<char> result;
  
  BOOST_FOREACH(char character, expression)
     if (isOperator(character))
        result.push_back(character);
  
  return result;
}
 
int main() {
  std::string expression = "22.3 + 69 - 69 * 98 + 23.5";
  
  std::vector<double> operands  = extractOperands (expression);
  std::copy(operands.begin(), operands.end(), std::ostream_iterator<double>(std::cout, " "));
  
  std::cout << std::endl;
  
  std::vector<char> operators = extractOperators(expression);
  std::copy(operators.begin(), operators.end(), std::ostream_iterator<char>(std::cout, " "));
}
Результат: http://liveworkspace.org/code/8a4949...d47fa5cf21fec7

Не по теме:

Цитата Сообщение от sandye51 Посмотреть сообщение
CyBOSSeR, ни раз уже мои так удаляли
Что за проекты и куда выкладывали: на форум или на файлообменник?

sandye51
16.04.2011, 12:47
  #12

Не по теме:

Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Что за проекты и куда выкладывали: на форум или на файлообменник?
обычные из MVS2010. Заливал сюда в архиве.

CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
16.04.2011, 12:58     Строку в число #13
Цитата Сообщение от FroL Посмотреть сообщение
он проще для понимания
Кому как.

Не по теме:

Цитата Сообщение от sandye51 Посмотреть сообщение
обычные из MVS2010. Заливал сюда в архиве.
Хм... Выкладывать проекты на форум правилами не запрещается. Поэтому модераторы не должны удалять подобные вложения. Если подобное повторится пишите администрации (можно лично мне) в ЛС.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2011, 00:38     Строку в число
Еще ссылки по теме:

C++ Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри
Необходимо вывести строку prime, если число простое, или composite, если число составное C++
Сравнить число и строку C++

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

Или воспользуйтесь поиском по форуму:
Дима-Дима
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 63
20.04.2011, 00:38  [ТС]     Строку в число #14
Помогите кто нить с этим алгоритмом Бауэра Земельзона, где я в нем намудрил, подскажите(
Yandex
Объявления
20.04.2011, 00:38     Строку в число
Ответ Создать тему
Опции темы

Текущее время: 18:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru