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

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

Восстановить пароль Регистрация
 
nsashans
7 / 7 / 0
Регистрация: 16.07.2012
Сообщений: 56
08.08.2012, 11:05     Извлечь числа #1
Как можно извлечь из стоки 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zuq
 Аватар для 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;
}
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Извлечь числа  
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Извлечь числа  
nsashans
7 / 7 / 0
Регистрация: 16.07.2012
Сообщений: 56
08.08.2012, 11:34  [ТС]     Извлечь числа #5
Всем спасибо, буду разбираться
nameless
Эксперт C++
 Аватар для nameless
289 / 288 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2012, 13:09     Извлечь числа
Еще ссылки по теме:

Как извлечь корень из числа без функции с++ ? C++
C++ Даны действительные числа. Отрицательные возвести в квадрат, а из положительных извлечь корень
C++ Как извлечь числа из строки

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

Или воспользуйтесь поиском по форуму:
Avazart
 Аватар для Avazart
6900 / 5140 / 252
Регистрация: 10.12.2010
Сообщений: 22,593
Записей в блоге: 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() лучше применить какое нибудь другое преобразование.
Yandex
Объявления
08.08.2012, 13:09     Извлечь числа
Ответ Создать тему
Опции темы

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