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

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

Восстановить пароль Регистрация
 
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
18.11.2013, 23:17     Сконвертировать строку в число #1
подскажите пожалуйста, вот я беру из текстового файла число и оно у меня получается типа стринг, а его можно как-то зделать флоат или там инт например?
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
void main()
{
    FILE *f;                                      
    string bs;                                                                          
    float t;
    t=5;
    f=fopen("TCP_1.txt","r");                                                    
    while(!feof(f))                                                                  
    {
        bs+=fgetc(f);                                                        
    }
    fclose(f);                                                                           
    c_str(bs);
    cout<<bs<<endl;
    scanf("%i");
}
может есть функция какае-то для этого готовая? или еще что? у меня пока есть только идея самому создать функцию и с помощью c_str в нее передать мою строку, но я еще не разу не использовал c_str и незнаю как оно используется, да и оно же делает символьный массив и мне кажется не заработает, а мне надо как бы числа получить, ну что бы сравнить или добавлять
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
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 минуту
или они для стрига не покататят...вот я в этом плохо разбираюсь))
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
18.11.2013, 23:38  [ТС]     Сконвертировать строку в число #3
щас попробую, а как правильно использовать?
C++
1
double atof(bs)
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
18.11.2013, 23:45     Сконвертировать строку в число #4
итернал, ну вроде так
C++
1
double x=atof(s);
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
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");
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 01:33     Сконвертировать строку в число #6
Цитата Сообщение от итернал Посмотреть сообщение
не-а, неполучилось,
Как делали, что не получилось? Покажите.
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
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 секунды
ну тоесть без класа только, то уже наработки
alsav22
5282 / 4801 / 442
Регистрация: 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();
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
19.11.2013, 01:55  [ТС]     Сконвертировать строку в число #9
а надо какуе-то дополнительную библиотеку? а то ошибки выдает
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 01:55     Сконвертировать строку в число #10
Или так:
C++
1
2
string str = "4.2";
double n = atof(str.c_str());
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
19.11.2013, 01:57  [ТС]     Сконвертировать строку в число #11
а, тю я туплю, поздно уже
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 01:57     Сконвертировать строку в число #12
Цитата Сообщение от итернал Посмотреть сообщение
а надо какуе-то дополнительную библиотеку? а то ошибки выдает
Написано:
C++
1
#include <sstream>
И должен быть или using namespace std или использовать std:: в коде.
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
19.11.2013, 12:45  [ТС]     Сконвертировать строку в число #13
Цитата Сообщение от итернал Посмотреть сообщение
а, тю я туплю, поздно уже
увидел уже

Добавлено через 10 часов 43 минуты
подскажите а можно как-то извлечь из файла несколько переменных что бы получитить, а то в голову что-то вопще неприходит как это реализовать
вот если одна стрка, то этот код хорошо работает, а если например вот так
786
453
657
110001
что-то неполучается сообразить, я уже думал по цыклу прогонять и если найдет елемент "\n" начинат записывать в новую переменную, ну а потом уже приобразовать ее к числу, но что-то пока не клеется, ну ведь если в цыкле задать задать условие if(bs.at(i)=='\n') и дальше как-то тупик, ну и смысл что я нашол переход на новую строку, хотя в одном цикле можно найти все переходы, а в другом зделать создание строк начиная с этих переходов или как еще можно зделать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 16:49     Сконвертировать строку в число #14
Если в файле так, то: если файловый поток, то чтение с помощью >> прямо в числовую переменную, без всяких преобразований, если указатель на файл (как в коде), то чтение с помощью fscanf() тоже сразу в числовую переменную.
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
19.11.2013, 16:54  [ТС]     Сконвертировать строку в число #15
через fscanf() можно в несколько переменных сразу будет?
типо что-то fscanf(f,bs,a,b)
и оно запишет две строки из файла в две рахные переменны?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.11.2013, 17:26     Сконвертировать строку в число #16
В массив читайте, а лучше в вектор.
итернал
4 / 4 / 0
Регистрация: 17.09.2012
Сообщений: 284
19.11.2013, 17:30  [ТС]     Сконвертировать строку в число #17
всмысле в массив? тоесть зделать цыкл и там fscanf или как? я просто некогда не пользовался еще fscanf и у меня в примере нету, ну там где я смотрю, в книге
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2013, 17:34     Сконвертировать строку в число
Еще ссылки по теме:

C++ Сконвертировать вектор строк в переменную типа float
[VC++6.0] Во что сконвертировать LPCWSTR без потерь? C++
Конвертировать строку с датой и временем в число секунд и наоборот - число секунд в дату и время C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 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;
}
Yandex
Объявления
19.11.2013, 17:34     Сконвертировать строку в число
Ответ Создать тему
Опции темы

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