12 / 12 / 5
Регистрация: 03.06.2016
Сообщений: 169

Int из char[] проверка

13.05.2018, 20:40. Показов 969. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Можно ли как нибудь проверит влезет ли char[], например char[]="6463736655664", в переменную int?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.05.2018, 20:40
Ответы с готовыми решениями:

Реализация функции char *padl(const char *string, int len, int c=' ')
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...

Форматирование строк, char to int & int to char
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn str_to_num(const str) // Тупо...

Как превести из char* в int и наоборот из int в char*?
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому написать функцию не сложно, но наверняка это...

12
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
13.05.2018, 20:43
Что-то типа такого?

C++
1
2
3
4
5
6
7
8
9
int main() {
  char kek[] = "123456789";
 
  if (atoi(kek) <= numeric_limits<int>::max()) {
    cout << "Cool";
  } else {
    cout << ":(";
  }
}
0
12 / 12 / 5
Регистрация: 03.06.2016
Сообщений: 169
13.05.2018, 20:58  [ТС]
Хм дак atoi возвращает переделанное число а излишки отбрасывает, в итоге этот метод всегда тру будет

Добавлено через 59 секунд
А если сделать макс инт как массив чар и сравнивать их?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
13.05.2018, 21:35
MINO, надо?
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
#include <limits>
#include <string>
 
bool IfMax(const std::string s)
{
    std::string max = std::to_string(std::numeric_limits<int>::max() );
 
    if (s.size() > max.size() )
        return true;
    
    if (s.size() == max.size() )
    {
        for (std::size_t i = 0; i < max.size(); ++i)
        {
            if (s[i] > max[i] )
                return true;
        }
    }
 
    return false;
}
 
int main()
{
    std::string s1 = "6463736655664";
    std::string s2 = std::to_string(std::numeric_limits<int>::max() );
 
    bool result1 = IfMax(s1);
    bool result2 = IfMax(s2);
 
    s2[s2.size() - 1] = '8';
    bool result3 = IfMax(s2);
    
    return 0;
}
1
12 / 12 / 5
Регистрация: 03.06.2016
Сообщений: 169
13.05.2018, 21:49  [ТС]
Спасибо
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
13.05.2018, 23:10
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
    const char*str="9999999999999999999999999";
    long res=strtol(str,nullptr,10);
    if(errno)
        cout<<"Ops..."<<endl;
    else
        cout<<res<<endl;
    return 0;
}
0
12 / 12 / 5
Регистрация: 03.06.2016
Сообщений: 169
14.05.2018, 15:28  [ТС]
Как то криминально через ерно делать
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.05.2018, 15:29
Оно с C++11 thread-local, так что не вижу проблемы.
0
14 / 14 / 8
Регистрация: 10.12.2015
Сообщений: 157
14.05.2018, 15:52
все равно его лучше обнулить. ну мало ли.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
14.05.2018, 15:52
Цитата Сообщение от ReDoX Посмотреть сообщение
Что-то типа такого?
atoi возвращает int, а переменная типа int не может быть больше numeric_limits<int>::max(), а значит условие atoi(kek) <= numeric_limits<int>::max() всегда истинно.

_stanislav, в строке могут быть нули вначале.

Renji, это не будет работать, например, если лимит int == 2147483647, а число в строке 2147483648.

Как вариант, можно использовать std::from_chars из C++17:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <charconv>
#include <limits>
 
int main()
{
    char str[] = {"2147483648"};
    int result = 0;
    if (
        std::from_chars_result conv_res = std::from_chars(str, str + std::size(str), result);
        conv_res.ec == std::errc::invalid_argument ||
        conv_res.ec == std::errc::result_out_of_range
    )
    {
        std::cout << "error";
    } else 
    {
        std::cout << result;
    }
}
Правда, тоже не всё гладко, но для многих случаев сойдет.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
14.05.2018, 15:56
Цитата Сообщение от Croessmah Посмотреть сообщение
это не будет работать, например, если лимит int == 2147483647, а число в строке 2147483648.
Strtol прекрасно будет работать, вывесив в errno значение ERANGE. Да, специально проверил.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
14.05.2018, 16:00
Renji, не заметил, что res типа long, сорян.
0
848 / 651 / 323
Регистрация: 24.02.2017
Сообщений: 2,297
14.05.2018, 19:33
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
#include <iostream>
using namespace std;
 
int main()
{
   char n[]="2147483647";
   int a[10]={2,1,4,7,4,8,3,6,4,7};
 
   if(strlen(n)>10)
        cout<<"no\n";
    if(strlen(n)<10)
        cout<<"yes\n";
    if(strlen(n)==10)
      {
        for(int i=0;i<10;i++)
             if(n[i]-48>a[i])
               {
                cout<<"no\n";
                system("pause");
                return 0;
               }
         cout<<"yes\n";
      }
 
   system("pause");
   return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.05.2018, 19:33
Помогаю со студенческими работами здесь

Подскажите пожалуйста с int main(int argc, char*argv[])
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc&gt;1 то программе передан хотя бы один аргумент,...

Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*)
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа Помогите...

Сделать преобразование unsigned char в char, а затем типу int
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

конвертирование (char)int (char*)int
Вопрос такой каким образом можно выполнить вот такую операцию: у нас есть: int c = 12; char d = ''PS &quot;; Получиться...

int main(int argc, char* argv[]) ?
Зачем нужны аргументы (int argc, char* argv) для функции main() и обязательно ли их писать?


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

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

Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru