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

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

Войти
Регистрация
Восстановить пароль
 
mr_burtak
-15 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 24
#1

Напишите функцию, которая получает на вход строку цифр, и возвращает соответствующее целочисленное значение - C++

12.12.2015, 13:00. Просмотров 864. Ответов 12
Метки нет (Все метки)

Напишите функцию atoi (), которая получает строку цифр, и возвращает соответствующее int. Например, atoi ("123") - это 123
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2015, 13:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Напишите функцию, которая получает на вход строку цифр, и возвращает соответствующее целочисленное значение (C++):

Написать функцию atoi(), которая принимает параметр - строку цифр и возвращает соответствующее ей целое - C++
Это оказалось мне не по-силам, поэтому прошу помощи,господа:) Напишите функцию atoi(), которая имеет параметр - строку цифр и...

Напишите функцию, получающую целое значение, которая возвращает число с обращенным порядком цифр - C++
1. Напишите функцию, получающую целое значение, которая возвращает число с обращен-ным порядком цифр. 2. Наибольший общий делитель (НОД)...

Напишите перегруженную функцию power (), которая принимает два целочисленных параметра типа int и возвращает целочисленное значение типа int - C++
Операции над целыми числами осуществляются быстрее, чем над числами с плавающей точкой. Напишите перегруженную функцию power (), ...

Создать функцию, которая на вход получает строку символов, сообщает количество вхождений каждой цифры в строку... - C++
Создать функцию, которая на вход получает строку символов, сообщает количество вхождений каждой цифры в строку и в случае, если цифр 5, 6,...

Как сделать функцию которая получает цифру и возвращает строку? - C++
Лучше всего наглядный пример, пожалуйста. :) Благодарю всех заранее.

Напишите функцию, которая для любого целого аргумента возвращает целое значение, полученное изменением порядка следования цифр на обратный - C++
2)Напишите функцию, которая для любого целого аргумента возвращает целое значение, полученное изменением порядка следования цифр на...

12
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
12.12.2015, 13:24 #2
mr_burtak,
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
#include<cctype>
using namespace std;
int main()
 
{
    char str[] = "12345";
    int n=atoi(str);
    cout << n << endl;  
    return 0;
}
0
Volrajas
Заблокирован
12.12.2015, 13:44 #3
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
bool isdigit(char c)
{
    return c >= '0' && c <= '9';
}
 
int atoi(const char *str)
{
    int result = 0;
    bool negative = *str == '-';
 
    if (negative)
        str++;
 
    while (isdigit(*str))
    {
        result *= 10;
        result += *str - '0';
        str++;
    }
 
    return negative ? -result : result;
}
 
int main()
{
    int n = atoi("-123");
}
2
Байт
Эксперт C
17714 / 11735 / 1871
Регистрация: 24.12.2010
Сообщений: 23,535
12.12.2015, 14:01 #4
Volrajas, для полноты картины еще бы пропустить лидирующие пробелы. И плюсик проверять.
0
Volrajas
Заблокирован
12.12.2015, 14:03 #5
Цитата Сообщение от Байт Посмотреть сообщение
Volrajas, для полноты картины еще бы пропустить лидирующие пробелы. И плюсик проверять.
они и так пропустятся, они же не число, значит в цикл не войдет, а плюсик то зачем? он не играет роли, если число не отрицательное, то оно и так положительное
0
Байт
Эксперт C
17714 / 11735 / 1871
Регистрация: 24.12.2010
Сообщений: 23,535
12.12.2015, 14:21 #6
Цитата Сообщение от Volrajas Посмотреть сообщение
они и так пропустятся, они же не число,
Дайте на вход строку " 123". Ваше atoi даст 0 (Проверьте!)
Цитата Сообщение от Volrajas Посмотреть сообщение
а плюсик то зачем? он не играет роли,
И испытайте на "+123"
0
mr_burtak
-15 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 24
12.12.2015, 15:44  [ТС] #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
bool isdigit(char c)
{
    return c >= '0' && c <= '9';
}
 
int atoi(const char *str)
{
    int result = 0;
    bool negative = *str == '-';
 
    if (negative)
        str++;
 
    while (isdigit(*str))
    {
        result *= 10;
        result += *str - '0';
        str++;
    }
 
    return negative ? -result : result;
}
 
int main()
{
    int n = atoi("-123");
}
0
Volrajas
Заблокирован
12.12.2015, 16:36 #8
Цитата Сообщение от Байт Посмотреть сообщение
Дайте на вход строку " 123". Ваше atoi даст 0 (Проверьте!)
вы говорили о лидирующих пробелах (т.е. конечных), да 0, так и должно быть, юзеру функции следует самому озаботится правильностью подаваемых данных, в C# например при вызове int.Parse(" 123") будет исключение, как вариант здесь тоже можно допилить исключения, я просто сделал чисто в сишном стиле...
Цитата Сообщение от Байт Посмотреть сообщение
И испытайте на "+123"
аналогично
Цитата Сообщение от mr_burtak Посмотреть сообщение
какие сюда надо подключать библиотеки????
никаких, здесь используются только базовые типы

Добавлено через 8 минут
виноват, про C# я ошибся, действительно там он отбрасывает передние пробелы сам и '+' воспринимает, ладно тогда вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int atoi(const char *str)
{
    int result = 0;
    
    while (*str == ' ')
        str++;
    
    bool negative = *str == '-';
 
    if (negative || *str == '+')
        str++;
 
    while (isdigit(*str))
    {
        result *= 10;
        result += *str - '0';
        str++;
    }
 
    return negative ? -result : result;
}
1
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
12.12.2015, 17:16 #9
mr_burtak,
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>
#include<vector>
#include<iterator>
#include<cctype>
#include<string>
using namespace std;
int main()
{
    string str;
    getline(cin, str);
    vector<int>vec;
 
    for (int i(0); i < str.length(); ++i)
    {
        if (isdigit(str[i]))
            vec.push_back((int)(str[i]-'0'));
    }
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        
        cout<<*it <<" ";
    }
 
 
    
    return 0;
}
Добавлено через 20 минут
mr_burtak,
для числа
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
#include<iostream>
#include<vector>
#include<iterator>
#include<cctype>
#include<string>
using namespace std;
int main()
{
    string str;
    getline(cin, str);
    vector<int>vec;
 
    for (int i(0); i < str.length(); ++i)
    {
        if (isdigit(str[i]))
            vec.push_back((int)(str[i]-'0'));
    }
    long num = vec[0];
    for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        
        
        if (it != vec.begin())
        {
            num  =num*10 + *it;
            
 
        }
 
 
        cout <<"\n"<< num << endl;
 
 
    
    return 0;
}
0
Volrajas
Заблокирован
12.12.2015, 17:20 #10
anti-k, код уг честно скажу, начиная с того что ТС просил именно функцию, а не все в мейне, и кончая тем что он будет работать не правильно, ты добавляешь все числа в строке, не подумав что между ними могут встретится посторонние символы, ну и '+' '-' ты тоже не учитываешь
0
Байт
Эксперт C
17714 / 11735 / 1871
Регистрация: 24.12.2010
Сообщений: 23,535
12.12.2015, 18:18 #11
Цитата Сообщение от Volrajas Посмотреть сообщение
вы говорили о лидирующих пробелах (т.е. конечных)
С какого перепугу лидеры оказались в конце?
А так все нормально, код симпатичный. Я просто хотел, чтоб он вел себя как сишный atoi, уж коли он название такое носит, больше ничего. И допиливание совсем не сложное и очевидное...
Еще раз
0
Volrajas
Заблокирован
12.12.2015, 18:23 #12
Цитата Сообщение от Байт Посмотреть сообщение
С какого перепугу лидеры оказались в конце
а ну да чета я попутал
0
anti-k
227 / 75 / 23
Регистрация: 17.07.2015
Сообщений: 774
Завершенные тесты: 1
12.12.2015, 21:16 #13
Volrajas, Я начинающий только, это просто мой вариант, к стати символы все кроме digits отбрасывает на ура.
Иными словами в вектор пушится только is digit
0
12.12.2015, 21:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2015, 21:16
Привет! Вот еще темы с ответами:

Создать функцию, которая на вход получает строку символов и один символ, функция печатает те слова строки, в которых встречается этот символ. - C++
Здраствуйте, вы не могли б мне помоч, у меня проблема з задачей, в коде постоянно выдаёт ошыбки на мове С, , и это еще перевести в...

Написать функцию, которая получает значение типа float и возвращает две строки: одна представляет вещественное число в обычном виде ,а другая - C++
Написать функцию, которая получает значение типа float и возвращает две строки: одна представляет вещественное число в обычном виде ,а...

Как написать функцию, которая бы получала на входе целочисленное число, а возвращала бы значение суммы цифр куба этого числа? - C++
Сабж.

Напишите функцию, которая возвращает значение полученное из первой и последней цифры числа - C++
Всем привет! Вот лаба из универа. HELP!! 1) Напишите функцию, которая принимает в качестве параметра натуральное значение n, по...


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

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

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