Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
#1

Сконвертировать строку в число - C++

18.11.2013, 23:17. Просмотров 386. Ответов 17
Метки нет (Все метки)


http://www.cyberforum.ru/cpp-beginners/thread2019278.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2013, 23:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сконвертировать строку в число (C++):

Сконвертировать символ строки в число
Вообщем к примеру есть строка char *s; Мне надо сконвертировать в int...

Программа на С, которая вводит число типа int с клавиатуры, преобразует ее в строку (str), выводит на дисплей число и строку.
Задача направленная на усвоение следующих понятий: прототип функции; заголовок...

Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное число», «нулевое число», «положительное нечетное число» и т. д.
Дано целое число. Вывести его строку-описание вида «отрицательное чет-ное...

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

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

17
newb_programmer
237 / 237 / 113
Регистрация: 03.09.2011
Сообщений: 558
18.11.2013, 23:20 #2
итернал,
double atof(const char *s); - Преобразует строку s в число с плавающей точкой типа double. Заголовочный файл - math.h

int atoi(const char *s); - Преобразует строку s в число типа int. Возвращает значение или нуль, если строку преобразовать нельзя. Заголовочный файл - stdlib.h

long atol(const char *s); - Преобразует строку s в число типа long. Возвращает значение или нуль, если строку преобразовать нельзя. Заголовочный файл - stdlib.h

эти подойдут?

Добавлено через 1 минуту
или они для стрига не покататят...вот я в этом плохо разбираюсь))
1
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
18.11.2013, 23:38  [ТС] #3
щас попробую, а как правильно использовать?
C++
1
double atof(bs)
0
newb_programmer
237 / 237 / 113
Регистрация: 03.09.2011
Сообщений: 558
18.11.2013, 23:45 #4
итернал, ну вроде так
C++
1
double x=atof(s);
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
19.11.2013, 01:32  [ТС] #5
не-а, неполучилось, а что если написать функцию проверки, ну тоесть зделать цыкл и там условие
ну для начало создать переменую например x=0 и потом по циклу гонять и проверять есть i-ый символ == цифре, то прибавлять эту цыфру к х, ну и при это еще умножить на 10*i, ну что бы десятки учитывать, ну кроме когда i=0
такое возможно? или как еще можно придумать реализовать? я та код впринцепи напишу, мне бы идейку

Добавлено через 1 час 37 минут
вот что-то наваял знаю еще сильно не доработано, не учитывает если там ноль и так далее, но с числом 898 должно работать нормально, а получается 198
ну вот код
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
78
79
80
#include <stdio.h>
#include <math.h>
#include <string>
#include <iostream>
using namespace std;
class Chislo
{
public:
    Chislo()
    {}
    ~Chislo()
    {}
    void perevod(string s, float &x);
};
void Chislo::perevod(string s,float &x)
{
    x=0;
    for(int i=0;i<s.length();i++)
    {
        if(i==0)
        {
            if(s.at(i)=='1')
                x+=1;
            else if(s.at(i)=='2')
                x+=2;
            else if(s.at(i)=='3')
                x+=3;
            else if(s.at(i)=='4')
                x+=4;
            else if(s.at(i)=='5')
                x+=5;
            else if(s.at(i)=='6')
                x+=6;
            else if(s.at(i)=='7')
                x+=7;
            else if(s.at(i)=='8')
                x+=8;
            else if(s.at(i)=='9')
                x+=9;
        }
        else
        {
            if(s.at(i)=='1')
                x+=1*10*i;
            else if(s.at(i)=='2')
                x+=2*10*i;
            else if(s.at(i)=='3')
                x+=3*10*i;
            else if(s.at(i)=='4')
                x+=4*10*i;
            else if(s.at(i)=='5')
                x+=5*10*i;
            else if(s.at(i)=='6')
                x+=6*10*i;
            else if(s.at(i)=='7')
                x+=7*10*i;
            else if(s.at(i)=='8')
                x+=8*10*i;
            else if(s.at(i)=='9')
                x+=9*10*i;
        }
    }
}
void main()
{
    FILE *f;                                     
    string bs; 
    float t;
    f=fopen("ÒÑÐ_1.txt","r"); 
    while(!feof(f))
    {
        bs+=fgetc(f); 
    }
    fclose(f); 
    Chislo r;
    r.perevod(bs,t);
    double x=atof(bs);
    cout<<t<<endl;
    scanf("%i");
}
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 01:33 #6
Цитата Сообщение от итернал Посмотреть сообщение
не-а, неполучилось,
Как делали, что не получилось? Покажите.
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
19.11.2013, 01:36  [ТС] #7
ну эта строка была закоментирована, ну во время выполнения
double x=atof(bs);

Добавлено через 57 секунд
вот так делал
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
#include <stdio.h>
#include <math.h>
#include <string>
#include <iostream>
using namespace std;
class Chislo
{
public:
    Chislo()
    {}
    ~Chislo()
    {}
    float perevod(string s);
};
void main()
{
    FILE *f;                                      //оголошення змінної покажчика на структуру роботи з рядками
    string bs;                                                                           //оголошення об'єкта рядка
    double t;
    t=5;
    f=fopen("ТСР_1.txt","r");                                                    //відкриття файлу для читання
    while(!feof(f))                                                                   //цикл до визначення кінця рядка
    {
        bs+=fgetc(f);                                                         //формуємо рядок
    }
    fclose(f);                                                                             //закриття файлу
    double x=atof(bs);
    cout<<"r'ad"<<x<<endl;
    scanf("%i");
}
Добавлено через 32 секунды
ну тоесть без класа только, то уже наработки
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 01:50 #8
Через строковый поток:
C++
1
2
3
4
5
6
7
8
#include <sstream>
 
string str = "4.2";
stringstream s;
s << str;
float n;
s >>  n;
s.clear();
1
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
19.11.2013, 01:55  [ТС] #9
а надо какуе-то дополнительную библиотеку? а то ошибки выдает
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 01:55 #10
Или так:
C++
1
2
string str = "4.2";
double n = atof(str.c_str());
1
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
19.11.2013, 01:57  [ТС] #11
а, тю я туплю, поздно уже
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 01:57 #12
Цитата Сообщение от итернал Посмотреть сообщение
а надо какуе-то дополнительную библиотеку? а то ошибки выдает
Написано:
C++
1
#include <sstream>
И должен быть или using namespace std или использовать std:: в коде.
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
19.11.2013, 12:45  [ТС] #13
Цитата Сообщение от итернал Посмотреть сообщение
а, тю я туплю, поздно уже
увидел уже

Добавлено через 10 часов 43 минуты
подскажите а можно как-то извлечь из файла несколько переменных что бы получитить, а то в голову что-то вопще неприходит как это реализовать
вот если одна стрка, то этот код хорошо работает, а если например вот так
786
453
657
110001
что-то неполучается сообразить, я уже думал по цыклу прогонять и если найдет елемент "\n" начинат записывать в новую переменную, ну а потом уже приобразовать ее к числу, но что-то пока не клеется, ну ведь если в цыкле задать задать условие if(bs.at(i)=='\n') и дальше как-то тупик, ну и смысл что я нашол переход на новую строку, хотя в одном цикле можно найти все переходы, а в другом зделать создание строк начиная с этих переходов или как еще можно зделать?
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 16:49 #14
Если в файле так, то: если файловый поток, то чтение с помощью >> прямо в числовую переменную, без всяких преобразований, если указатель на файл (как в коде), то чтение с помощью fscanf() тоже сразу в числовую переменную.
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
19.11.2013, 16:54  [ТС] #15
через fscanf() можно в несколько переменных сразу будет?
типо что-то fscanf(f,bs,a,b)
и оно запишет две строки из файла в две рахные переменны?
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 17:26 #16
В массив читайте, а лучше в вектор.
0
итернал
4 / 4 / 6
Регистрация: 17.09.2012
Сообщений: 325
Завершенные тесты: 1
19.11.2013, 17:30  [ТС] #17
всмысле в массив? тоесть зделать цыкл и там fscanf или как? я просто некогда не пользовался еще fscanf и у меня в примере нету, ну там где я смотрю, в книге
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 17:34 #18
Как-то так:
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
#include <stdio.h>
#include <iostream>
using namespace std;
 
int main()
{
    FILE *f;                                      
    float bs[100];                                                                          
    f=fopen("TCP_1.txt","r"); 
    int i = 0;
    while(1)                                                                  
    {
        fscanf(f, "%f", &bs[i]);
        if (feof(f)) break;
        ++i;
        if (i == 100) break;
    }
    fclose(f);                                                                           
    
    for (int j = 0; j < i; ++j)
        cout << bs[j] << endl;
    
    return 0;
}
1
19.11.2013, 17:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 17:34
Привет! Вот еще темы с решениями:

Преобразовать число в строку/строкук в число
Обьясните, как преобразововать число в строку и наоборот. Искал в гугле, но...

Преобразовать строку->число->строку
Всем доброго времени суток! Скоро будет экзамен по программированию.С++ начали...

Необходимо вывести строку prime, если число простое, или composite, если число составное
Уважаемые программисты, проверьте, пожалуйста, решение задачи Проверьте,...

Конвертировать строку с датой и временем в число секунд и наоборот - число секунд в дату и время
Здравствуйте. Подскажите пожалуйста есть строки типа char/string: 2015.04.30...


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

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

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