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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Дима-Дима
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 63
#1

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

16.04.2011, 09:44. Просмотров 657. Ответов 13
Метки нет (Все метки)

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

Программа на С, которая вводит число типа int с клавиатуры, преобразует ее в строку (str), выводит на дисплей число и строку. - C++
Задача направленная на усвоение следующих понятий: прототип функции; заголовок функции; тело функции; параметры, принимаемые функцией...

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. - C++
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д. ...

Преобразовать число в строку/строкук в число - C++
Обьясните, как преобразововать число в строку и наоборот. Искал в гугле, но конкретного ответа так и не получил (все, что узнал, что есть...

Преобразовать строку->число->строку - C++
Всем доброго времени суток! Скоро будет экзамен по программированию.С++ начали изучать в конце семестра. В билете задача написать программу...

Необходимо вывести строку prime, если число простое, или composite, если число составное - C++
Уважаемые программисты, проверьте, пожалуйста, решение задачи Проверьте, является ли число простым. Вводится одно число n. Формат...

Конвертировать строку с датой и временем в число секунд и наоборот - число секунд в дату и время - C++
Здравствуйте. Подскажите пожалуйста есть строки типа char/string: 2015.04.30 06:30 как перевести данное время в число секунд. И...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.04.2011, 10:47 #2
посимвольно
кури польскую запись
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
16.04.2011, 11:05 #3
Считываешь посимвольно с условием - если *,/,+ или - то заносишь как символ, а если другой то записываешь в строку а потом преобразовываешь в число, с помощью StrToInt или через метод string.
sandye51
программист С++
682 / 584 / 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
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.04.2011, 11:15 #6
там немаленький код, я писал до НГ перевод в польскую запись и последующее вычисление
пиши в аську насчет этого, тут проекты запрещается выкладывать.. (
FroL
61 / 49 / 2
Регистрация: 07.01.2010
Сообщений: 307
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++
2300 / 1670 / 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
Сообщений: 307
16.04.2011, 11:37 #9
CyBOSSeR, мой вариант хоть и сырее и не полный, но он проще для понимания
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
16.04.2011, 11:45 #10
CyBOSSeR, ни раз уже мои так удаляли
CyBOSSeR
Эксперт C++
2300 / 1670 / 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++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
16.04.2011, 12:58 #13
Цитата Сообщение от FroL Посмотреть сообщение
он проще для понимания
Кому как.

Не по теме:

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

Дима-Дима
1 / 1 / 0
Регистрация: 09.12.2010
Сообщений: 63
20.04.2011, 00:38  [ТС] #14
Помогите кто нить с этим алгоритмом Бауэра Земельзона, где я в нем намудрил, подскажите(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2011, 00:38
Привет! Вот еще темы с ответами:

Число в строку - C++
Как перевести число в строку не используя itoa и фишек из нового стандарта типа stoi и т.п. Возможно-ли это через stringstream? ...

Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри - C++
Дано целое число , лежащие в диапазоне от -999 до 999. Вывести строку - словесного описание данного числа вида &quot;отрицательное двухзначное...

Сравнить число и строку - C++
Помогите! using namespace std; string s; s=Edit1-&gt;Text.t_str(); int x; if( s == x) { ShowMessage(&quot;...

Преобразование число в строку - C++
Привет ребята, хочу спросить как с помощь printf число можно переобразовать в строку? Например через itoa это можно сделать вот так: ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
20.04.2011, 00:38
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru