Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
mr_burtak
-15 / 0 / 0
Регистрация: 28.11.2015
Сообщений: 24
#1

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

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

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

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

Напишите функцию, получающую целое значение, которая возвращает число с обращенным порядком цифр
1. Напишите функцию, получающую целое значение, которая возвращает число с...

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

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

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

12
anti-k
227 / 75 / 31
Регистрация: 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
18099 / 11953 / 2484
Регистрация: 24.12.2010
Сообщений: 24,075
12.12.2015, 14:01 #4
Volrajas, для полноты картины еще бы пропустить лидирующие пробелы. И плюсик проверять.
0
Volrajas
Заблокирован
12.12.2015, 14:03 #5
Цитата Сообщение от Байт Посмотреть сообщение
Volrajas, для полноты картины еще бы пропустить лидирующие пробелы. И плюсик проверять.
они и так пропустятся, они же не число, значит в цикл не войдет, а плюсик то зачем? он не играет роли, если число не отрицательное, то оно и так положительное
0
Байт
Эксперт C
18099 / 11953 / 2484
Регистрация: 24.12.2010
Сообщений: 24,075
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 / 31
Регистрация: 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
18099 / 11953 / 2484
Регистрация: 24.12.2010
Сообщений: 24,075
12.12.2015, 18:18 #11
Цитата Сообщение от Volrajas Посмотреть сообщение
вы говорили о лидирующих пробелах (т.е. конечных)
С какого перепугу лидеры оказались в конце?
А так все нормально, код симпатичный. Я просто хотел, чтоб он вел себя как сишный atoi, уж коли он название такое носит, больше ничего. И допиливание совсем не сложное и очевидное...
Еще раз
0
Volrajas
Заблокирован
12.12.2015, 18:23 #12
Цитата Сообщение от Байт Посмотреть сообщение
С какого перепугу лидеры оказались в конце
а ну да чета я попутал
0
anti-k
227 / 75 / 31
Регистрация: 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

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

Напишите рекурсивную функцию, которая возвращает значение
Напишите рекурсивную функцию, которая возвращает значение.

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


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

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

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