С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 1
Регистрация: 09.12.2013
Сообщений: 27

Перевод строки из цифр и знаков перед ней в целое число

08.01.2014, 17:24. Показов 1862. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить программу, которая переводит строку, состоящую из цифр и возможно из
знаков + или - (в начале строки) в целое число
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.01.2014, 17:24
Ответы с готовыми решениями:

Перевод строки в целое число
Ребята подскажите пожалуйста как перевести длинную строку ,к примеру 1234567890123456 в целое число? Это уже наверное не int уже а long...

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

Последовательность из цифр, букв и знаков. Подсчитать чего больше и составить строки только из цифр, букв и знаков
Дана последовательность состоящая из цифр, букв и знаков пунктуации в произвольном порядке. Подсчитать чего больше и составить строки...

19
34 / 34 / 17
Регистрация: 27.01.2013
Сообщений: 200
08.01.2014, 18:06
Можно пример входных данных? Не совсем понятно, что именно требуется?
0
0 / 0 / 1
Регистрация: 09.12.2013
Сообщений: 27
08.01.2014, 19:57  [ТС]
Ну насколько я понял к примеру Исходные данные -598(строка) . В результате должны получить -598 как число. То есть наверное исх. данные типа char , а результат типа int
0
34 / 34 / 17
Регистрация: 27.01.2013
Сообщений: 200
08.01.2014, 19:58
СергейПрог, не понял... какой в этом смысл? Можно же сразу считать все как число...
0
0 / 0 / 1
Регистрация: 09.12.2013
Сообщений: 27
08.01.2014, 20:06  [ТС]
Я такого же мнения о нашем преподе. Но такое задание. Ещё дал пример с заданием который вообще близко не стоит с моим))
0
34 / 34 / 17
Регистрация: 27.01.2013
Сообщений: 200
08.01.2014, 20:19
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main(){
    char str[100]={'\0'};
    int mnoj=1;
    int end=0;
    int out=0;
    scanf("%s", str);
    
    if(str[0]=='-' || str[0]=='+')
        end=1; 
    
    for(int i=strlen(str)-1; i>=end; --i)
    {
        out+=(str[i]-48)*mnoj;
        mnoj*=10;
    } 
    if( str[0]=='-' )
        out*=-1;
        
    printf("\n--------\n%d\n", out);  
    system("PAUSE");
}
Добавлено через 21 секунду
этот код преобразует введеную строку в число, вроде то, что нужно
0
Клюг
 Аватар для Charles Kludge
7677 / 3192 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
08.01.2014, 20:59
C
1
out = atoi(strpbrk(str,"+-1234567890"));
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
09.01.2014, 10:14
Цитата Сообщение от RHB Посмотреть сообщение
Кликните здесь для просмотра всего текста
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
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
int main(){
    char str[100]={'\0'};
    int mnoj=1;
    int end=0;
    int out=0;
    scanf("%s", str);
    
    if(str[0]=='-' || str[0]=='+')
        end=1; 
    
    for(int i=strlen(str)-1; i>=end; --i)
    {
        out+=(str[i]-48)*mnoj;
        mnoj*=10;
    } 
    if( str[0]=='-' )
        out*=-1;
        
    printf("\n--------\n%d\n", out);  
    system("PAUSE");
}


Добавлено через 21 секунду
этот код преобразует введеную строку в число, вроде то, что нужно
А если во входной строке не число??? Например -123b45
0
34 / 34 / 17
Регистрация: 27.01.2013
Сообщений: 200
09.01.2014, 10:39
Цитата Сообщение от vua72 Посмотреть сообщение
А если во входной строке не число??? Например -123b45
Ну знаете.. проверку сделать не сложно, той же функцией strpbrk
0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
09.01.2014, 11:27
Цитата Сообщение от RHB Посмотреть сообщение
Ну знаете.. проверку сделать не сложно, той же функцией strpbrk
А если вы ввели 100 символов, то что произойдет?
0
34 / 34 / 17
Регистрация: 27.01.2013
Сообщений: 200
09.01.2014, 11:32
vua72,
Цитата Сообщение от vua72 Посмотреть сообщение
А если вы ввели 100 символов, то что произойдет?
То произойдет то, что нужно отличать учебные программы и реальные. Если даже мы введем не 100 символов а 10, то уже вполне можем вылетить за диапазон int. Предлагаете использовать long long int? Long double? ptrdiff_t? Не слишком ли... жирно будет преподу вы превышаете сложность учебной программы? Задание само по себе по менбшей мере бессмысленное, если только не является подоплекой под работу со сверх-большими числами, в чем я лично сильно сомневаюсь.
0
09.01.2014, 14:36

Не по теме:

х-ммм, а я всегда считал, что учебные задачи пишут, чтобы научиться писать правильно. Ну хотя бы понимать потенциальные ошибки. А так получается, что ц нас программа, которая принимает что-угодно и возвращает какой-то результат.
Ну и как бы задание н совсем бессмысленное, имхо, т.к. научиться парсить строки еще никому не мешало. Не в обиду Вам.

0
34 / 34 / 17
Регистрация: 27.01.2013
Сообщений: 200
09.01.2014, 19:23
vua72, всегда все можно сделать если включить мозг.
Вот вам программа с контролем переполнения буффера и контролем вводимых значений, но я, лично, сильно сомневаюсь что это нужно топикмейкеру.
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
 
#define MAX_INPUT_LENGTH 100
 
#pragma pack(1, push)
 
inline char in_array(const char*, char);
ptrdiff_t toDec(char*, int&);
void controlInput(char*, int&);
int input(char*);
 
int main(){
    char str[MAX_INPUT_LENGTH]={'\0'};
    int start=input(str);
    controlInput(str, start);
    system("PAUSE");
}
 
int input(char* str)
{
    fgets(str, MAX_INPUT_LENGTH, stdin);
    str[strlen(str)-1]='\0';
    int start=0;
    if(str[0]=='-' || str[0]=='+')
        start=1;
    return start;
}
 
inline char in_array(const char* arr, char key){
    for(size_t i = 0; i < strlen(arr); ++i)
        if(arr[i]==key)
            return 1;
    return 0;
}
 
void controlInput(char* str, int &start){
    while(strlen(str)==1 && start==1)
    {
        printf("\nNekorrectno vvedeni dannie!\nVvedite ih echo raz: \n");
        start=input(str);
    }
    char nums[]="0123456789";
    for(size_t i = start; i < strlen(str); ++i){
        if(!in_array(nums, str[i])){
            printf("\nNekorrectno vvedeni dannie!\nVvedite ih echo raz: \n");
            start=input(str);
            i=start;
        }
    }
    #ifndef _WIN64
        printf("\n--------\n%I32d\n", toDec(str, start));
    #else
        printf("\n--------\n%I64d\n", toDec(str, start));
    #endif
 
}
 
ptrdiff_t toDec(char* str, int &start){
    size_t mnoj=1;
    ptrdiff_t out=0;
    for(ptrdiff_t i=strlen(str)-1; i>=start; --i)
    {
        out+=(str[i]-48)*mnoj;
        mnoj*=10;
    }
    if( str[0]=='-' )
        out*=-1;
    return out;
}
#pragma pack(pop)
0
09.01.2014, 19:29

Не по теме:

Цитата Сообщение от RHB Посмотреть сообщение
Вот вам программа с контролем переполнения буффера и контролем вводимых значений, но я, лично, сильно сомневаюсь что это нужно топикмейкеру.
Уже лучше, осталось в функция убрать передачу параметров по ссылке :)

0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
09.01.2014, 19:31
Цитата Сообщение от vua72 Посмотреть сообщение
А если во входной строке не число??? Например -123b45
Если во входной строке не число??? Например -123b45
то читаем внимательно условие:
Составить программу, которая переводит строку, состоящую из цифр и возможно из
знаков + или - (в начале строки) в целое число
даже если предположить, что там будет китайский алфавит - он не соответствует условию задачи.
0
09.01.2014, 19:33

Не по теме:

Цитата Сообщение от vua72 Посмотреть сообщение
Уже лучше, осталось в функция убрать передачу параметров по ссылке
Вот уж нет уж, я вобще то так сделал специально! На то, чтобы в функции создать копии переменных(как если бы мы их принимали не по ссылке, а обычным методом) тратится
1) Время
2) Ресурсы(память)
Так что передача параметров по ссылке это экономия и того, и другого.

0
419 / 418 / 167
Регистрация: 28.11.2010
Сообщений: 1,183
09.01.2014, 21:56

Не по теме:

Цитата Сообщение от Darkrduk Посмотреть сообщение
Если во входной строке не число??? Например -123b45
то читаем внимательно условие:
даже если предположить, что там будет китайский алфавит - он не соответствует условию задачи.
ну знаете, во входной строке может быть любой шлак, в конце концов пользователь может ошибиться. Так что не нужно тут тыкать в условие. Из-за таких внимательных чтений условий атомные станции взрываются.



Добавлено через 2 часа 12 минут

Не по теме:

Цитата Сообщение от RHB Посмотреть сообщение

Не по теме:


Вот уж нет уж, я вобще то так сделал специально! На то, чтобы в функции создать копии переменных(как если бы мы их принимали не по ссылке, а обычным методом) тратится
1) Время
2) Ресурсы(память)
Так что передача параметров по ссылке это экономия и того, и другого.

А что Си поддерживает передачу параметра по ссылке?

0
34 / 34 / 17
Регистрация: 27.01.2013
Сообщений: 200
09.01.2014, 22:55

Не по теме:

Цитата Сообщение от vua72 Посмотреть сообщение
А что Си поддерживает передачу параметра по ссылке?
А вот этого я не знаю. Всегда использовал. В любом случае можно ЛЕГКО переделать на передачу по адресу и везде работать через операцию разыменования. Но суть от этого не изменится и любой мало-мальски стоящий программист сделает данные действия не задумываясь. В любом случае данный код я уже точно переделывать не буду ибо лень ибо это уже чистой воды трата времени.



Добавлено через 4 минуты

Не по теме:

http://younglinux.info/c/function
Тут вроде пишут что можно по ссылке на Си
https://www.cyberforum.ru/c-li... 64478.html
А тут что нельзя. Меня точно учили что можно, но не факт что правильно учили :D
Я там где то inline функцию объявил... вот этого точно в чистом си нельзя(только сейчас прочитал), но эта проблема тоже рашается просто удалением такового слова

0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
09.01.2014, 23:22
RHB, вроде как нельзя, это "плюсовые" возможности, насколько помню (в первой ссылке говорят про указатели, а не про ссылочные переменные). Также, как и встроенные функции. З.Ы. и для ptrdiff_t необходимо подключить stddef.h. З.Ы. #pragma тоже не везде тянет, надо было тогда уж "по стариночке", #ifnded+#define..

З.Ы. хватит уже оффтопить..

Добавлено через 17 минут
Равнозначный код на си будет выглядеть как-то так
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#ifndef TRANSLATE_H_
#define TRANSLATE_H_
 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stddef.h>
 
#define MAX_INPUT_LENGTH 100
 
 
char in_array(const char*, char);
ptrdiff_t toDec(char*, int*);
void controlInput(char*, int*);
int input(char*);
 
int main(int argc, char *argv[]) {
    char str[MAX_INPUT_LENGTH]={'\0'};
    int start=input(str);
    controlInput(str, &start);
    system("PAUSE");
    return 0;
}
 
int input(char* str)
{
    fgets(str, MAX_INPUT_LENGTH, stdin);
    str[strlen(str)-1]='\0';
    int start=0;
    if(str[0]=='-' || str[0]=='+')
        start=1;
    return start;
}
 
char in_array(const char* arr, char key){
    for(size_t i = 0; i < strlen(arr); ++i)
        if(arr[i]==key)
            return 1;
    return 0;
}
 
void controlInput(char* str, int *start){
    while(strlen(str)==1 && *start==1)
    {
        printf("\nNekorrectno vvedeni dannie!\nVvedite ih echo raz: \n");
        *start=input(str);
    }
    char nums[]="0123456789";
    for(size_t i = *start; i < strlen(str); ++i){
        if(!in_array(nums, str[i])){
            printf("\nNekorrectno vvedeni dannie!\nVvedite ih echo raz: \n");
            *start=input(str);
            i=*start;
        }
    }
    #ifndef _WIN64
        printf("\n--------\n%td\n", toDec(str, start));
    #else
        printf("\n--------\n%td\n", toDec(str, start));
    #endif
 
}
 
ptrdiff_t toDec(char* str, int *start){
    size_t mnoj=1;
    ptrdiff_t out=0;
    for(ptrdiff_t i=strlen(str)-1; i>=*start; --i)
    {
        out+=(str[i]-48)*mnoj;
        mnoj*=10;
    }
    if( str[0]=='-' )
        out*=-1;
    return out;
}
 
#endif
Алгоритм не трогал, лишь "подправил" до работоспособности для Си. З.Ы. сделано под С99 (создание переменных в for)

Только программа все равно неверно работает, и, имхо, слишком много лишнего, достаточно было добавить проверку, и все..
0
 Аватар для falko
33 / 33 / 35
Регистрация: 09.12.2013
Сообщений: 63
09.01.2014, 23:59
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
38
39
40
41
42
43
44
45
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#include <ctype.h>
 
 
bool strtoint(const char *, int *);
 
 
int main(void){
    printf("Enter string: ");
    char str[BUFSIZ];
    fgets(str, BUFSIZ, stdin);
    if (str[strlen(str)-1] == '\n')  str[strlen(str)-1] = '\0';
 
    int number;
    if (strtoint(str, &number))  printf("%d\n", number);
    else  printf("Number error\n");
 
    return EXIT_SUCCESS;
}
 
 
bool strtoint(const char *str, int *number){
    bool sign = false;
    if (*str == '+' || *str == '-'){
        if (*str == '-')  sign = !sign;
        if (!*++str)  return false;
    }
 
    if (*str == '0') return *++str ? false : (*number = 0, true);
 
    int n = 0;
 
    for (; *str; ++str){
        if (!isdigit(*str))  return false;
 
        n = n * 10 + *str - '0';
    }
 
    *number = sign ? -n : n;
 
    return true;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.01.2014, 23:59
Помогаю со студенческими работами здесь

[emu8086] Преобразование строки восьмеричных цифр в целое десятичное число
2.Функция Write и test, которая преобразует строку восьмеричных цифр в целую десятичную число, эквивалентное ему.

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

Вставить пустую строку перед строкой файла с заданным номером
Помогите составит программу на c++ .Дано целое число K и текстовый файл. Вставить пустую строку перед строкой файла с номером K. Если...

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

Дано целое число N — количество цифр и задана каждая из этих цифр. Сформировать число, состоящее из этих цифр, начиная с разряда единиц.
Дано целое число N — количество цифр и задана каждая из этих цифр. Сформировать число, состоящее из этих цифр, начиная с разряда единиц. ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru