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

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

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

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

06.09.2014, 17:08. Просмотров 2292. Ответов 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
_Ivana
3201 / 1817 / 153
Регистрация: 01.03.2013
Сообщений: 5,047
Записей в блоге: 4
09.09.2014, 23:07 #31
Renji, а вы ассемблерные листинги скомпилированных ваших вариантов посмотрите и сравните с моим сишным примером на прошлой странице, и продолжим об элегантности. А строку с числом нигде сложить нельзя, ни "по человечески", ни математически. Везде имеются в виду перегруженные операторы конкатенации с предварительным переводом числа в строку в каком-то формате.
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16702 / 6624 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 1
09.09.2014, 23:34 #32
Помимо этого есть куча возможностей по добавлению такой возможности. Например, такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <sstream>
 
template <typename L, typename R> std::string operator+(L left, R right)
{
    std::ostringstream os;
    os << left << right;
    return os.str();
}
 
int main(int argc, char *argv[])
{
    std::string s = "string";
    std::string s2 = s + 10;
    std::cout << s2 << std::endl;
    return 0;
}
http://ideone.com/n9QNky

Нагуглено на просторах инета за 1 минуту. Хотя написать самому его также не составляет труда.

Помимо этого, есть куча всяких функций по переводу чисел в строки, наподобие такого
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
int main(int argc, char *argv[])
{
    std::string s = "string";
    std::cout << s + std::to_string(10) << std::endl;
 
    return 0;
}
http://ideone.com/pApewK

Не по теме:

З.Ы. Перл уже свое отжил, имхо, с шестым затянули

0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
09.09.2014, 23:43 #33
Цитата Сообщение от KOPOJI Посмотреть сообщение
Помимо этого есть куча возможностей по добавлению такой возможности. Например, такой
Он наверное имел в виду поддержку такого для строковых литералов.

Но беда в том, что строковый литерал - это массив, а массив участвует в адресной арифметике, т.к. преобразуется к указателю. Следовательно вот такая запись
C++
1
"abcdef" + 3;
будет интерпретирована как смещение указателя на три sizeof(char), а результатом выражения будет являться указатель на константный char. Поэтому на уровне языка обеспечить то, что он хочет, будет просто невозможно не перекроив его в совершенно другой язык.
0
Renji
2018 / 1386 / 312
Регистрация: 05.06.2014
Сообщений: 3,955
09.09.2014, 23:49 #34
Она всегда будет существовать. Если сделать так, чтобы она не существовала - это будет уже совсем другой язык.
С чего бы? Инкремент/декремент/сравнение char оставить, неявное приведение к числу запретить. Желающим именно короткое число выдать тип byte. Дальше все как в C++.
Если вам не нравится статическая типизация - то так и скажите.
А, ну да, это просто динамическая типизация которая в C++ не нужна. Именно поэтому в C++ вообще не было стандартной функции преобразования числа в string. Если, конечно, не считать уже упомянутый выше stringstream. И только к C++11 наконец впилили to_string. Причем, ни то, ни другое не позволят вам сложить "N=" и N, так как "N="+N - адресная арифметика и точка. Как вы с шаблонами не шаманьте.
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
09.09.2014, 23:54 #35
Цитата Сообщение от Renji Посмотреть сообщение
С чего бы? Инкремент/декремент/сравнение char оставить, неявное приведение к числу запретить. Желающим именно короткое число выдать тип byte. Дальше все как в C++.
См. выше, я объяснил. Число тут не при чем.
0
Renji
2018 / 1386 / 312
Регистрация: 05.06.2014
Сообщений: 3,955
10.09.2014, 00:04 #36
Поэтому на уровне языка обеспечить то, что он хочет, будет просто невозможно не перекроив его в совершенно другой язык.
Все возможно.
1) В C++11 ввели суффиксы делающие "string"s объектом string. Сделать этот суффикс опцией по умолчанию и радоваться. А для желающих по старинке пусть будет суффикс c_s.
2) Сделать "string" объектом c_string с возможностью явного приведения к const char*.
Но все это требует шаманств на уровне синтаксиса.
0
DrOffset
7377 / 4454 / 1009
Регистрация: 30.01.2014
Сообщений: 7,304
10.09.2014, 00:10 #37
Цитата Сообщение от Renji Посмотреть сообщение
Все возможно.
Во-первых разница есть: сделать своими силами с помощью языковых средств и иметь встроенную поддержку на уровне языка.
Во-вторых
Цитата Сообщение от Renji Посмотреть сообщение
Сделать этот суффикс опцией по умолчанию и радоваться.
и сколько это существующего кода поломает? Кстати, совершено не на пустом месте в std::string нет оператора приведения к const char*.
В третьих видно, что тема скатывается в холивар, поэтому с вашего позволения я больше здесь участвовать не буду. Если у кого-то есть конкретные здравые предложения, предлагаю опубликовать их здесь {ссылка удалена}. Пустые же разговоры в этой ветке ни к чему не приведут.
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16702 / 6624 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 1
10.09.2014, 00:16 #38
Цитата Сообщение от Renji Посмотреть сообщение
Желающим именно короткое число выдать тип byte
char уже не катит? Затайпдефьте себе на byte..
Цитата Сообщение от Renji Посмотреть сообщение
А, ну да, это просто динамическая типизация которая в C++ не нужна. Именно поэтому в C++ вообще не было стандартной функции преобразования числа в string
Если вам сильно хочется - конкатенируйте, как вам угодно через функции. Sprintf/snprintf к вашим услугам. Стандартные, еще с Си.
Цитата Сообщение от Renji Посмотреть сообщение
ни то, ни другое не позволят вам сложить
ААА, какой плохой язык!!! Там с плюсиком нельзя работать!!! ААА..

Добавлено через 3 минуты
Цитата Сообщение от Renji Посмотреть сообщение
явного приведения к const char*.
C++
1
const_cast<char *>(std::string.c_str())
?
0
Renji
2018 / 1386 / 312
Регистрация: 05.06.2014
Сообщений: 3,955
10.09.2014, 00:20 #39
char уже не катит? Затайпдефьте себе на byte..
C++
1
2
3
byte X=10;
string text="text";
text+=X;
А теперь мучительно пытаемся понять что хотел получить автор - "text10" или "text\x0A"? Вот для исключения подобного и нужно развести char и byte по разным углам.
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16702 / 6624 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 1
10.09.2014, 00:27 #40
Цитата Сообщение от Renji Посмотреть сообщение
А теперь мучительно пытаемся понять что хотел получить автор
Нет, представляем кривизну рук автора. Собственно, ваши сообщения похожи на известную пословицу про устав и монастырь. Я понимаю, вы привыкли к тому, что такое позволяется в вашем языке, который, конечно же, лучший. Но, представьте, в других ЯП это реализовано по другому, и не всегда то, что вы привыкли делать в одном ЯП хорошо во втором... Ой, а что творится в языках с префиксной или постфиксной формой записи
0
Renji
2018 / 1386 / 312
Регистрация: 05.06.2014
Сообщений: 3,955
10.09.2014, 00:36 #41
Нет, представляем кривизну рук автора.
Никакой кривизны, так как std всегда будет трактовать X как символ и заведомо выдаст "text\0x0A". А вот если добавить оператор сложения строки с числом, тут то кривизна и вылезет. Почему и говорю что этого оператора не будет, пока не исчезнет принцип "char это тоже число такое".
0
Seha
0 / 0 / 0
Регистрация: 22.01.2015
Сообщений: 3
01.03.2015, 23:26 #42
Есть вариант, который выводит на экран все цифры вне зависимости от их место положения.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
void main()
{
    char a[] = "123abx344mfm435sdf985";
    
    for (char *p = a; *p; ++p)
    {
        if (isdigit(*p))
        {
            cout << *p ;
        }
    }
    cout << "\n";
}
Что скажете? Имеет право на существование?
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16702 / 6624 / 433
Регистрация: 12.06.2012
Сообщений: 19,879
Завершенные тесты: 1
01.03.2015, 23:31 #43
Цитата Сообщение от Seha Посмотреть сообщение
Что скажете?
а что сказать? Использование void main, неполный код и зачем-то вывод всех цифр вне зависимости от их местоположения вместо преобразования строки в число. Что тут скажешь?
0
01.03.2015, 23:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2015, 23:31
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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