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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 609
Завершенные тесты: 1
#1

Извлечь число из строки - C++

06.09.2014, 17:08. Просмотров 2267. Ответов 42
Метки нет (Все метки)

Добрый день.
Есть строка, например, вида:
Код
field001600.bin
Из нее нужно извлечь число 1600 (т.е. без ведущих нулей). Подскажите, как это делается на C++?
На PHP это делается за 0.5 сек, например, с помощью регулярных выражений.

Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2014, 17:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Извлечь число из строки (C++):

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

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

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

Как извлечь только цифры из строки - C++
Есть файл и в нем строки вида 00:00:00,000 --> 00:00:00,200 Нужно извлечь только цифры из каждой такой строки и одну часть с цифрами до...

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

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

42
dr.curse
389 / 345 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
06.09.2014, 17:10 #2
[progeR], ну так используйте регулярки и на с++ что мешает?
0
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 609
Завершенные тесты: 1
06.09.2014, 17:21  [ТС] #3
На этом языке я не знаю регов.
C++ (Qt)
1
2
3
smatch matches;
regex_search("field001600.bin",matches,"/\d+/");
print int(matches[0]);
Прокатит?

PS в PHP прокатит.
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
06.09.2014, 18:12 #4
без ведущих нулей
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include <regex>
 
 
int main() 
{
    std::string str("field001600.bin");
    std::smatch res;
    std::regex reg("[1-9]\\d*");
    if(std::regex_search(str, res, reg))
    {
        std::cout << res[0] << '\n';
    }
    return 0;
}
1
marina2
Рожденная для битвы
272 / 50 / 5
Регистрация: 08.11.2009
Сообщений: 1,023
06.09.2014, 18:23 #5
igorrr37, это нормально, что программа не компилируется в Убунту g++?
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
06.09.2014, 18:31 #6
Цитата Сообщение от [progeR] Посмотреть сообщение
Прокатит?
C++11 (regex пока что поддерживается не всеми компиляторами):
C++
1
2
3
4
5
6
7
8
9
10
11
#include <regex>
#include <iostream>
 
int main()
{
    std::smatch m;
 
    std::regex_search(std::string("field001600.bin"), m, std::regex("[1-9]\\d+"));
 
    std::cout << m[0];
}
C++03 + boost:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <boost/regex.hpp>
#include <iostream>
 
int main()
{
    boost::smatch m;
 
    boost::regex_search(std::string("field001600.bin"), m, boost::regex("[1-9]\\d+"));
 
    std::cout << m[0];
}
1
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
06.09.2014, 18:31 #7
В g++ еще не сделали нормально регексы, это для vs2012 код
0
DrOffset
7376 / 4453 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
06.09.2014, 18:34 #8
Цитата Сообщение от marina2 Посмотреть сообщение
это нормально, что программа не компилируется в Убунту g++?
-std=c++11 нужно добавить.
но компилятор нужен с полной поддержкой std::regex, у некоторых (4.7.2 точно) версий были проблемы с ним.

Добавлено через 1 минуту
гарантированно будет работать везде, если использовать boost.
1
zss
Модератор
Эксперт С++
6531 / 6093 / 2007
Регистрация: 18.12.2011
Сообщений: 15,845
Завершенные тесты: 1
06.09.2014, 18:51 #9
Ну, а если по простому:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <ctype.h> 
#include <stdlib.h> 
int main()
{
    char str[]="field001600.bin";
    for(char* p=str;*p;p++)
        if(isdigit(*p))
        {
            int result=atoi(p);
            std::cout<<result<<std::endl;
            system("pause");
            return 0;
        }
    std::cout<<"No number"<<std::endl;
    system("pause");
    return 1;
}
1
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 609
Завершенные тесты: 1
06.09.2014, 20:11  [ТС] #10
Компилятор что-то не знает ни одной рег. функции...

Мда... Шо за язык такой, в котором нет даже элементарного функционала для работы со строками...

Добавлено через 2 минуты
Число надо в переменную сохранить. А по очереди цифры выводить на экран не надо.
0
orange_fox
34 / 34 / 6
Регистрация: 06.04.2014
Сообщений: 189
06.09.2014, 20:30 #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <ctype.h> 
#include <sstream>
#include <string>
int main()
{
    char str[]="field001600.bin";
    std::stringstream ss;
    std::string resultstr;  //Тут будет результат
    for(char* p=str;*p;p++)
        if(isdigit(*p))
        {
            int result=atoi(p);
            ss<<result;
            resultstr = ss.str();
         }
}
0
_Ivana
3185 / 1801 / 153
Регистрация: 01.03.2013
Сообщений: 5,030
Записей в блоге: 3
06.09.2014, 20:39 #12
2 строки, писал 5 секунд.
C++
1
2
3
    char str[]="field001600.bin", *p = str;
    int r = 0;
    while(*p++) if(*p >= '0' && *p <= '9') r = r*10 + *p - '0';
ЗЫ если человек ругает язык, хвастается знанием регулярных выражений, но при этом не может переделать код вывода на экран в заполнение числа, это наводит на мысли
2
Renji
1968 / 1366 / 308
Регистрация: 05.06.2014
Сообщений: 3,898
06.09.2014, 20:41 #13
Компилятор что-то не знает ни одной рег. функции...
Самые свежие компиляторы знают. Другое дело что тот же Дебиан бывает либо стабильным (stable) но не свежим, либо свежим, но не стабильным (testing). А вместе с ним и все компиляторы в нем.
0
[progeR]
30 / 8 / 0
Регистрация: 20.08.2011
Сообщений: 609
Завершенные тесты: 1
06.09.2014, 21:23  [ТС] #14
Цитата Сообщение от _Ivana Посмотреть сообщение
2 строки, писал 5 секунд.
На PHP 0.5 сек ахахах)))
Я не хвастаюсь знанием Рег.Эксп - но после работы на PHP и Notepad++ понял, что это ДОЛЖНО быть неотъемлемой часть языка тем более общего назначения)
За код спасибо.

А какой компилятор - не знаю - программа не на моем компе компилируется, а на удаленном.
0
_Ivana
3185 / 1801 / 153
Регистрация: 01.03.2013
Сообщений: 5,030
Записей в блоге: 3
06.09.2014, 21:27 #15
Цитата Сообщение от [progeR] Посмотреть сообщение
За код спасибо.
Кнопка есть. Как говорил один человек, "мне все равно, а кому-то может быть приятно" И еще - там одна мелкая ошибка, связанная с постинкрементом, сделал потому что спешил в 5 секунд уложиться Как запостил код, увидел ее, но исправлять до твоей реакции не стал, мало ли какая она могла бы быть Но это тебе на закуску - сам разберешься и исправишь
0
06.09.2014, 21:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2014, 21:27
Привет! Вот еще темы с ответами:

Из положительных элементов извлечь квадратный корень, отрицательные возвести в квадрат, нулевые заменить на число В - C++
Задан массив, состоящий из 10 элементов. Из положительных элементов извлечь квадратный корень, отрицательные возвести в квадрат, нулевые...

Из строки извлечь символы операций в стек, а цифры - в другую строку - C++
Из исходной строки необходимо извлечь символы операций и поместить в стек а цифры в другую строку... но вот ошибка... Вот код:const int max...

Парсинг адресной строки, хочу извлечь индекс и название города - C++
Всем доброго дня. Хочу распарсить такой вот файлик: ------------------------------------------------------------ 125414,...

Извлечь значения из std::vector<char>, трактуя каждый символ, как разряд числа, сформировать это число - C++
Доброго времени суток. Есть вектор char std::vector &lt; char &gt; VECT; Его содержимое, например VECT == 43 '+' VECT ==...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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