Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712

Быстрое преобразование строки в число

10.06.2020, 09:28. Показов 757. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех. Мне необходимо написать функцию, которая должна максимально быстро преобразовывать строку в число. Строка представляет собой С-строку. При этом, если преобразование не удается, функция должна возвращать число по умолчанию, которое будет задаваться через параметры.
Какие стандартные инструменты предложите для этого?
C++
1
2
3
4
char* str1 = "123";
char* str2 = "asd";
int i1 = StrToIntDef(str1, -1); /* i1 = 123 */
int i2 = StrToIntDef(str2, -1); /* i2 = -1 */
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2020, 09:28
Ответы с готовыми решениями:

Быстрое преобразование Фурье и ошибка "Неявное преобразование типа"
А подскажите еще по одной прблемке: Есть программа реализующая БПФ (ну должна по крайней мере это делать) using System; using...

Быстрое преобразование Фурье
Это пример на сайте wikipedia Быстрого Преобразование Фурье. Два вопроса. 1)Как получить массив анализируемых данных для wav файла....

Быстрое преобразование фурье
требуется разложить сигнал в дискретный спектр. решил пользоваться функцией из библиотеки dflib : call dfftcf(a,b,c) все...

10
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
10.06.2020, 09:34
Цитата Сообщение от d7d1cd Посмотреть сообщение
Какие стандартные инструменты предложите для этого?
std::from_chars
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
10.06.2020, 09:53  [ТС]
Croessmah, было бы, наверное, здорово использовать это, но у меня библиотека даже не все возможности С++11 поддерживает, не говоря уже о С++17, в котором появляется std::from_chars.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
10.06.2020, 10:07
strtol().
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
10.06.2020, 10:17  [ТС]
nd2, да, сейчас как раз реализовал. Оцените:
C++
1
2
3
4
5
6
7
8
int StrToIntDef(const char* str, const int def)
{
  char* end;
  errno = 0;
  int res = strtol(str, &end, 10);
  if (*end || errno) return def;
  return res;
}
0
Неэпический
 Аватар для Croessmah
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 1
10.06.2020, 10:37
Цитата Сообщение от d7d1cd Посмотреть сообщение
Оцените
strtol "трогает" локали, поэтому звание "быстрого" можно отобрать.
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
10.06.2020, 11:24  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
strtol "трогает" локали, поэтому звание "быстрого" можно отобрать.
Так, так... Просчет. А зачем она их "трогает"? Ведь это преобразование в целое число. Там же не надо разбираться в разделителе целой и дробной части.
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
10.06.2020, 12:46
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
#include <iostream>
#include <sstream>
using namespace std;
 
int f(char *s, int n){
    stringstream t;
    int i=0;
    while(s[i]!='\0')
      if(!isdigit(s[i++])) return n;
    t<<s;
    t>>n;
    return n;
    }
 
int main()
{
   char *s1="123";
   char *s2= "asd";
   int n=-1;
 
   cout<<f(s1,n);
   cout<<"\n"<<f(s2,n);
   return 0;
}
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
10.06.2020, 13:03  [ТС]
повар1, отрицательные числа функция не может, получается? Кроме этого, если поданное число превысит int? Ну и в целом, намного ли Ваш вариант быстрее (и быстрее ли) моего?
0
Just Do It!
 Аватар для XLAT
4190 / 2645 / 654
Регистрация: 23.09.2014
Сообщений: 8,925
Записей в блоге: 3
10.06.2020, 13:47
повар1,
усовершенствовал вашу функцию
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
int f(char *s)
{   int i = 0;
    while(*s)i = i*10 + (*s++ - '0');
    return i;
}
 
int main()
{   char *s1 = "123";
    std::cout << f(s1) << "\n";
    return 0;
}
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
10.06.2020, 13:51
Цитата Сообщение от d7d1cd Посмотреть сообщение
Ну и в целом, намного ли Ваш вариант быстрее (и быстрее ли) моего?
Не быстрее. Он гораздо медленнее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.06.2020, 13:51
Помогаю со студенческими работами здесь

Быстрое преобразование Фурье
Добрый вечер, друзья. Нужна ваша помощь. Есть задание: &quot;Построить спектр функции&quot; и приведен рисунок. Данный рисунок я построил...

Быстрое преобразование Фурье
Доброго времени суток. Есть такая задача - даны два сигнала. Обычные сигналы синуса по времени. Нужно построить их взаимный спектр. Это у...

Быстрое преобразование Фурье
Не могу понять что это за коэф (-)j в формуле ДПФ. Просмотрел много различных статей, но везде эту инфу опускают, возможно это слишком...

Быстрое Преобразование Фурье
В качестве библиотеки взял хваленую IPP, и тут возник рад вопросов, вот код: packageSize = 4096; ...

Быстрое преобразование Фурье
Надо написать прогу преобразования звукового аудио файла формата WAV с помощью БПФ (прореживание по частоте)


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru