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

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

Войти
Регистрация
Восстановить пароль
 
nsashans
7 / 7 / 0
Регистрация: 16.07.2012
Сообщений: 56
#1

Извлечь числа - C++

08.08.2012, 11:05. Просмотров 616. Ответов 6
Метки нет (Все метки)

Как можно извлечь из стоки xx/xx/xxxx числа? И как извлечь если день/месяц введены как например 01 или 1 и вообще чтобы 'x' являлось числом...

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
#include <iostream>
using namespace std;
struct date
{
    int d;
    int m;
    int y;   
};
int main()
{
    date day;
    string user, d, m, y;
    int step;
    cout << "Date xx/xx/xxxx: ";
    cin >> user;
    for (int i=0; i<user.length(); i++)
    {
    if(user[i]=='/')
    {
        if ((step == 0)) {d = ...; step++;}
        if (step == 1) {m = ...; step++;}
        if (step == 2) {y = ...;}
        
    }
    }
    system("pause");
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.08.2012, 11:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Извлечь числа (C++):

Извлечь из строки числа - C++
Нужно извлечь из строки числа. &quot;12/12/12&quot; результат! day = 12; mounth = 12; year = 12; убил 10 минут чтобы найти что-то...

Как извлечь числа из строки - C++
Предположим что есть такое выражение и оно записано в блокноте (100;200) , Как извлечь из текстового документа 2 числа 100 и 200? понимаю...

Как извлечь корень из числа? - C++
Как извлечь корень из числа?

Извлечь одинаковые числа из массива - C++
Помогите, не пойму как сделать. Пусть нам дан массив типа int. Ну пускай это будет 1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7. А надо...

Как извлечь квадратный корень числа? - C++
Как в С++ найти корень с чисел 4 , 9 , 16 , 25 и так далее

Извлечь из записи целого числа нули - C++
Извлеч из записи целого числа нули

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zuq
95 / 95 / 2
Регистрация: 10.04.2011
Сообщений: 256
08.08.2012, 11:19 #2
Например так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <sstream>
 
int main() {
 
    std::stringstream ss;
    ss << "01/12/2012";
 
    int d, m, y;
    char ch;
 
    ss >> d >> ch >> m >> ch >> y;
 
    std::cout << d << '\n' << m << '\n' << y;
 
    return 0;
}
1
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2012, 11:28 #3
Вариант 1 - прямой ввод полей
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
#include <iomanip>
#include <iostream>
using namespace std;
 
struct date
{
    int d;
    int m;
    int y;   
};
 
int main()
{
    date day;
    char chr1, chr2;
    cout << "Date xx/xx/xxxx: ";
    cin>>day.d>>chr1>>day.m>>chr2>>day.y;
    if(cin.bad())
        cout<<"Input error\n";
    else
    cout<<"Fields of structure : \n"
        <<setw(2)<<setfill('0')<<day.d<<chr1
        <<setw(2)<<setfill('0')<<day.m<<chr2
        <<setw(4)<<setfill('0')<<day.y<<endl;
    return 0;
}
1
Миниатюры
Извлечь числа  
-=ЮрА=-
Заблокирован
Автор FAQ
08.08.2012, 11:32 #4
Вариант 2 - используем возможности sscanf
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
#include <string>
#include <iomanip>
#include <iostream>
using namespace std;
 
struct date
{
    int d;
    int m;
    int y;   
};
 
int main()
{
    date day;
    string str;
    char chr1, chr2;
    cout << "Date xx/xx/xxxx: ";
    getline(cin,str);
    if
    (
        5 !=
        sscanf
        (
            str.c_str(),
            "%d%c%d%c%d",
            &day.d,&chr1,&day.m,&chr2,&day.y
        )
    )
        cout<<"Input error\n";
    else
    cout<<"Fields of structure : \n"
        <<setw(2)<<setfill('0')<<day.d<<chr1
        <<setw(2)<<setfill('0')<<day.m<<chr2
        <<setw(4)<<setfill('0')<<day.y<<endl;
    return 0;
}
1
Миниатюры
Извлечь числа  
nsashans
7 / 7 / 0
Регистрация: 16.07.2012
Сообщений: 56
08.08.2012, 11:34  [ТС] #5
Всем спасибо, буду разбираться
0
nameless
Эксперт C++
334 / 298 / 14
Регистрация: 16.06.2009
Сообщений: 486
08.08.2012, 12:41 #6
nsashans, вариант с boost::date_time

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
#include <iostream>
#include <exception>
#include <stdexcept>
#include <string>
 
#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/gregorian/parsers.hpp>
#include <boost/date_time/local_time/local_time.hpp>
 
int main() {
   try {
      std::string date_str = "02/06/1992";
      std::string date_format = "%d/%m/%Y";
      boost::date_time::format_date_parser <boost::gregorian::date, char>
         parser(date_format, std::locale("C"));
      boost::date_time::special_values_parser <boost::gregorian::date, char>
         special_parser("a", "a", "a", "a", "a");   
      boost::gregorian::date date = parser.parse_date(date_str, date_format, special_parser);
      
      std::size_t year = static_cast <std::size_t>(date.year());
      std::size_t month = static_cast <std::size_t>(date.month());
      std::size_t day = static_cast <std::size_t>(date.day());
      
      std::cout << year << " " << month << " " << day << std::endl;
   } catch (const std::exception & exc) {
      std::cout << exc.what() << std::endl;
   }
}
http://liveworkspace.org/code/190a66...5d2e433624f69b
1
Avazart
Эксперт С++
7185 / 5359 / 280
Регистрация: 10.12.2010
Сообщений: 23,650
Записей в блоге: 17
08.08.2012, 13:09 #7
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
int main()
{
system("chcp 1251");
using namespace std;
 
int d,m,y;
 
ifstream ifs("1.txt");
if(ifs)
 {
   string buf;
 
   getline(ifs,buf,'/');
   d= atoi(buf.c_str());
 
   getline(ifs,buf,'/');
   m= atoi(buf.c_str());
 
   getline(ifs,buf,'/');
   y= atoi(buf.c_str());
 }
else cerr<<"error"<<endl;
 
cout<<d<<"/"<<m<<"/"<<y<<endl;
 
system("pause");
return 0;
}
//---------------------------------------------------------------------------
Ну вместо atoi() лучше применить какое нибудь другое преобразование.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 13:09
Привет! Вот еще темы с ответами:

Как извлечь корень из числа без функции с++ ? - C++
Может с циклами как нибудь

Извлечь любой корень из любого большого числа - C++
нужно разработать Windows-приложение для извлечения любого корня из любого большого числа. как бы функционал sqrt ограничен, как быть со...

Как из числа double 4.056 извлечь число 1000? - C++
То есть число это читается так: 4 целых 56 тысячных, вот мне нужно тысячу извлечь программно. Функции, предлагаемые math.h извлекают либо...

Извлечь 3 бита целого числа A с позиции n и перенести в число B на позицию m - C++
Доброго времени суток.Дана вот такая задача : извлечь 3 бита числа А, начиная с позиции n, и вставить их в число В, начиная с позиции...


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

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

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