Форум программистов, компьютерный форум CyberForum.ru

Моя реализация функции перевода string в int - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Структура «Железнодорожный состав» http://www.cyberforum.ru/cpp-beginners/thread741289.html
Создайте консольное приложение для решения задачи С++ Структура «Железнодорожный состав» с полями "номер поезда", "количество вагонов", "модель вагонов" (в одном составе используются вагоны одной модели). Бизнес-функция: расчёт длины состава по длине вагона для определенной модели (табл.). Модель вагона 10-4022 10-475 11-066 11-1709 11-1759
C++ Виртуальные функции Можете привести пример виртуальной функции с использованием ссылок? http://www.cyberforum.ru/cpp-beginners/thread741278.html
C++ Структура «Железнодорожный состав»
Структура «Железнодорожный состав» с полями "номер поезда", "количество вагонов", "модель вагонов" (в одном составе используются вагоны одной модели). Бизнес-функция: расчёт длины состава по длине вагона для определенной модели (табл.). Модель вагона Длина вагона(в м.) 10-4022 117,2 1--475 116,3 11-066 147,2 11-1709 ...
Другие виды списков C++
Помогите найти и исправить ошибку в задачке В текстовом файле заданы действительные числа. Выбрать из него убывающую последовательность наибольшей длины и вывести ее на экран. Если таких последовательностей несколько, то вывести их все в отдельной строке каждую. Для заполнения убывающих последовательностей формировать массив очередей, хранить для каждой очереди длину ее (количество...
C++ Наибольшее из трех чисел http://www.cyberforum.ru/cpp-beginners/thread741266.html
Составить функцию, которая получает три аргумента х, y, и z, и возвращает как результат наибольшее из х,y,z.
C++ Заменить каждую из групп точек одной точкой Ввести строку. Создать функцию, позволяющую заменить в заданной строке каждую из групп стоящих рядом точек одной точкой. Если знака <<.>> нет в строке, то вывести сообщение об етом.(использовать указатели). подробнее

Показать сообщение отдельно
sovaz1997
CEO SOVAZ Corp.
 Аватар для sovaz1997
379 / 225 / 2
Регистрация: 17.12.2011
Сообщений: 816
Записей в блоге: 1
22.12.2012, 13:27  [ТС]     Моя реализация функции перевода string в int
P.S. Я еще проверил память - моя побольше 720кб, а твоя 712кб. Это потому, что я по ссылке не передаю string и в одном месте использую тип double, а не int

Добавлено через 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
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <string>
 
using namespace std;
 
int str_to_int(string& a);
 
int main() {
    string s = "-768";
    cout << str_to_int(s);
    cin.get();
}
 
int str_to_int(string& a) {
    int num = 0;
    char tmp;
    bool anti = false;
    int l = 1;
 
    for(int i = a.size() - 1; i >= 0; --i, l *= 10) {
        if(a[i] == '0') {tmp = 0;}
 
        if(a[i] >= '0' && a[i] <= '9') {tmp = a[i] - '0';}
 
        else if(i == 0 && a[i] == '-') {anti = true; break;}
 
 
        else {
                return 0;
        }
 
        num += (tmp * l);
    }
 
    if(anti == true) {return -num;}
    else {return num;}
}
Улучшил работу с памятью

Добавлено через 10 минут
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 <string>
 
using namespace std;
 
int str_to_int(string& a);
 
int main() {
    string s = "-68";
    cout << str_to_int(s);
    cin.get();
}
 
int str_to_int(string& a) {
    int num = 0;
    char tmp;
    int l = 1;
 
    for(char i = a.size() - 1; i >= 0; --i, l *= 10) {
        if(a[i] == '0') {tmp = 0;}
 
        if(a[i] >= '0' && a[i] <= '9') {tmp = a[i] - '0';}
 
        else if(i == 0 && a[i] == '-') {break;}
 
 
        else {
                return 0;
        }
 
        num += (tmp * l);
    }
 
    if(a[0] == '-') {return -num;}
    else {return num;}
}
Теперь программа занимает 708 КБ ОЗУ. Достигнута высшая оптимизация (как и в настоящей ф-ии atoi())

Добавлено через 14 минут
Вверх
 
Текущее время: 09:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru