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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 74, средняя оценка - 4.61
tom
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 62
#1

Функция atoi, без использования библиотеки string - C++

06.02.2009, 17:55. Просмотров 9629. Ответов 11
Метки нет (Все метки)

функции atoi, без использования библиотеки string
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2009, 17:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция atoi, без использования библиотеки string (C++):

Задача со строками без использования библиотеки string.h - C++
Дана непустая строка S. Вывести на экран Эту же строку S, но с пробелами между символами.

Добавить 3 переменные в массив char без использования библиотеки string - C++
задача такая: есть 3 переменные, которые вводит пользователь адрес сервера, юзер, сообщение. нужно запихнуть их в массив char без...

Как сделать замену слова в строке без использования функций библиотеки string? - C++
вводится строка => вводится слово, которое нужно заменить(если оно есть в строке)=> вводится слово на которое нужно заменить

создать функцию для работы с строковыми переменными без использования библиотеки <string.h> - C++
Нужно создать функцию для работы с строковыми переменными без использования библиотеки &lt;string.h&gt;. собственно сама задача : поиск ...

Работа с файлом без использования библиотеки cstdio - C++
Добрый день! Было дано задание: создать файл и работать с ним без использования библиотеки cstdio. Если есть какие-то идеи, прошу...

Работа с векторами без использования STL и библиотеки <vector> - C++
Здравствуйте Уважаемые формучане. Подскажите пожалуйста, есть ли смысл писать свой собственный класс Vector если из него всё равно будет...

11
xToTa
13 / 13 / 0
Регистрация: 26.01.2009
Сообщений: 162
06.02.2009, 17:57 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//---------------------------------------------------------------------------
int new_atoi(const char* string)
{
 if(!string) return 0;
 int result = 0;
 
 //пропускаем пробельные символы
 while(*string == ' ' || *string == '\t' ) string++;
 
 // получаем знак числа
 bool bNegativeSign = (*string == '-');
 
 if(bNegativeSign || *string=='+') string++;
 
 while(*string) {
   if( (*string < '0' || *string> '9') ) break;
   result = result * 10 + (*string - '0');
   string++;
 }
return ( bNegativeSign ? -result : result );
}
//---------------------------------------------------------------------------
код не мой, но проверь, может оно?
0
Gravity
562 / 556 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
06.02.2009, 18:37 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <conio.h>
 
int atoi(char s[])
{
    int i, n;
    
    for(i=0, n=0; s[i]>='0' && s[i]<='9'; i++)
       n = n*10 + (s[i] - '0');
    return n;
}
 
int main()
{
    char s[128]="12345";
    
    printf("%d", atoi(s));
    getche();
    return 0;
}
2
rrrFer
Заблокирован
06.02.2009, 20:40 #4
вот даже чуть-чуть усовершенствованная (возвращает 0, если в переданной строке кроме цифр было еще что-то) :
C++
1
2
3
4
5
6
bool fun(char *s, int& A){
    int i;
    for(i=0,A=0;s[i]!='\0'&&isdigit(s[i]);i++)
        (A*=10)+=s[i]-48;
    return s[i]=='\0';
}
isdigit(s[i]) можно заменить на s[i]>47&&s[i]<58
0
tom
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 62
10.02.2009, 22:48  [ТС] #5
сспасибо, а можно если я ввожу строку из пробелов или ничего не ввожу нам возвращалось значение 0??
0
tom
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 62
14.02.2009, 12:21  [ТС] #6
помогите хоть кто-нибудь, очень надо(((...у мне не получается...
0
Ensase
Флудер
191 / 29 / 5
Регистрация: 23.03.2007
Сообщений: 335
14.02.2009, 12:43 #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
28
29
30
31
int
atoi(register const char * s)
{
    register char   c;
    register int    a;
    register unsigned char  sign;
 
skipws:
    c = *s;
    if(c == ' ' || c == '\t') {
        s++;
        goto skipws;
    }
    a = 0;
    sign = 0;
    if(c == '-') {
        sign++;
        s++;
    } else if(c == '+')
        s++;
conv:
    c = *s;
    if(isdigit(c)) {
        a = a*10 + (c - '0');
        s++;
        goto conv;
    }
    if(sign)
        return -a;
    return a;
}
0
rrrFer
Заблокирован
14.02.2009, 16:12 #8
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
#include <iostream>
using namespace std;
bool fun(char *s, int& A){   
    int i;   
    for(i=0,A=0;s[i]!='\0'&&isdigit(s[i]);i++)   
        (A*=10)+=s[i]-48;   
    return s[i]=='\0'&&amp;i;   
}   
int main(){
    char s[255];
    int A;
    strcpy(s,"       ");
    cout<<fun(s,A)<<endl;
    strcpy(s,"");
    cout<<fun(s,A)<<endl;
    strcpy(s,"123");
    strcpy(s,"       123");
    cout<<fun(s,A)<<endl;
    strcpy(s,"123       ");
    cout<<fun(s,A)<<endl;
    strcpy(s,"    gdf   ");
    cout<<fun(s,A)<<endl;
    strcpy(s,"123    fsd   123");
    cout<<fun(s,A)<<endl;
    strcpy(s,"123   123    123");
    cout<<fun(s,A)<<endl;
    strcpy(s,"123");
    cout<<fun(s,A)<<endl;
    system("pause");
    return 0; 
}
функция и примеры, от прошлой отличается только проверкой, если передана пустая строка: return s[i]=='\0'&&amp;i; при вводе всех пробелов и раньше она возвращала 0, вообще в строке не должно быть пробела(чтобы все нормально)

Добавлено через 4 минуты 1 секунду
что-то неправильно отображается строчка одна:
return s[i]=='\0'&&amp;amp;i;
откуда это amp; я незнаю
return s[i]=='\0' && i;
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
15.02.2009, 11:09 #9
В принципе можно переводить так: один символ типа char — число от 0 до 255. Циферные значения в ASCII-символах начинаются с 48. Так что если ты от каждой цифры в символьном виде отнимешь 48, то ты получишь цифру от 0 до 9. Примерно так.
PS сам не проверял, но думаю, что сработает.
0
tom
1 / 1 / 0
Регистрация: 08.11.2008
Сообщений: 62
15.02.2009, 12:06  [ТС] #10
а можно просто выйти из программы при вводе пустой строки?
0
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
15.02.2009, 12:57 #11
Да. strlen и exit в помощь.
0
rrrFer
Заблокирован
15.02.2009, 14:17 #12
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdlib.h>
#include <stdio.h>
bool fun(char *s, int& A){   
    int i;   
    for(i=0,A=0;s[i]!='\0'&&s[i]>47&&s[i]<58;i++)   
        (A*=10)+=s[i]-48;   
    return s[i]=='\0'&&amp;i;   
}   
int main(){
    char s[255];
    int A;
    *s=0;               //пустая строка
    if(fun(s,A)==0)     //if(!fun(s,A))     
        return 1; 
        //exit(0);
        //abort();
    system("pause");
    return 0; 
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2009, 14:17
Привет! Вот еще темы с ответами:

Преобразование char в int без использования функций библиотеки С - C++
Собственно САБЖ имеется переменная char c='123'; требуется поместить ее в целочисленную переменную например int k; так чтобы в нее...

Работа с текстом без использования string - C++
Нужно взять како-то небольшой текст и напечатать все слова, которые начинаются с буквы, отличную от буквы, с которой начинается первое...

Объединить строки без использования string.h - C++
Чем заменить strcpy ,strcat .

Задача без использования типа string - C++
Слова текста из малых латинских букв записаны не менее чем через один пробел; БЕЗ ИСПОЛЬЗОВАНИЯ КОНСТРУКЦИИ STRING: а) написать программу...


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

Или воспользуйтесь поиском по форуму:
12
Yandex
Объявления
15.02.2009, 14:17
Ответ Создать тему
Опции темы

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