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

перевод из строк в числа - C++

Восстановить пароль Регистрация
 
lasbat
2 / 2 / 0
Регистрация: 06.05.2010
Сообщений: 18
06.05.2010, 07:46     перевод из строк в числа #1
помогите с корректированием задачи: дан текст, содержащий целые числа, составить программу, которая выводит на экран минимальное из чисел.

тут идея с поиском в строке целых чисел и закидыванием их в массив, идея оказалась полной фигней.
сделал потом решение без массива, но файл с кодом благополучно потерян.
за индусский код просьба не кидать помидоры >_<
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "iostream"
#include "cstdlib"
#include "cstring"
#include "string"
using namespace std;
int main(){
 
    int min;
    string s1,sub;
        getline(cin,s1);
    int *s2=new int[s1.length()];
    for(unsigned int i=0;i<s1.length();i++)
 
        s2[i]=atoi(sub.c_str());
    min=s2[0];
    for(int i=0;i<n;i++){
        if (s2[i]<min)
            min=s2[i];
    }
    cout<<min;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
06.05.2010, 08:26     перевод из строк в числа #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <fstream>
#include <algorithm>
 
int main()
{
   std::vector<int> v;
   std::ifstream ifs("outfile.txt");
 
   int t = 0;
   while(ifs >> t)
      v.push_back(t);
 
   int min = *(std::min_element(v.begin(), v.end()));
   std::cout << min << std::endl;
 
   system("pause");
   return 0;
}
lasbat
2 / 2 / 0
Регистрация: 06.05.2010
Сообщений: 18
06.05.2010, 08:40  [ТС]     перевод из строк в числа #3
ну с алгоритмом и векторами естественно очень легкая задача, мне надо реализовать её, без использования подобных библиотек и дополнительных функций
fasked
Эксперт C++
 Аватар для fasked
4925 / 2505 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
06.05.2010, 09:04     перевод из строк в числа #4
то есть ты хочешь сказать что использовать string можно, а vector нет? странное представление об алгоритмах и библиотеках.

Сделай тогда вот так:
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
#include <iostream>
#include <fstream>
 
int * min_element(int * a, int size)
{
   int * found = a;
   for(int i = 0; i < size; ++i)
      if(*found > a[i])
         found = &a[i];
   return found;
}
 
int main()
{
   std::ifstream ifs("infile.txt");
 
   int n = 0;
   ifs >> n;
 
   int *a = new int[n];
 
   for(int i = 0; i < n; ++i)
      ifs >> a[i];
 
   int min = *(min_element(a, n));
   std::cout << min << std::endl;
 
   delete[] a;
 
   system("pause");
   return 0;
}
В переменной n хранится количество чисел в файле, это должна быть самая первая запись в файле, напрмиер вот так:
Код
8
34 34 23 2 6 57 346 782
первая запись - 8 - это и есть размер
lasbat
2 / 2 / 0
Регистрация: 06.05.2010
Сообщений: 18
07.05.2010, 14:11  [ТС]     перевод из строк в числа #5
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
#include "iostream"
#include "cstdlib"
#include "cstring"
#include "string"
using namespace std;
int main(){
    unsigned int i=0;
int min=500;
cin.get();
string s1,sub;
string razdel=".,;:!? ";
getline(cin,s1);
string::size_type k=0;
k=s1.find_first_of(razdel,0);
int *s2=new int[s1.length()];
while(i!=s1.length()){
        if(isdigit(s1[i])){
            k=s1.find_first_of(razdel,i)+1;
            sub=s1.substr(i,k-i);
            cout<<"k="<<k<<"i="<<i<<endl;
            s2[i]=atoi(sub.c_str());
            if(min>s2[i])
                min=s2[i];
                    }
        i++;
    }
cout<<min;
}
вот практически то, чего я хотел добиться, но теперь прога сравнивает только однозначные числа, и не реагирует на 1 элемент строки
пример: 1 фыв 2, выводит 2
пример: длорфы 17 128 12 лор27ю 88, выводит 1

Добавлено через 3 часа 17 минут
проблема всё еще не решена, реквестирую помощь=)

Добавлено через 17 часов 5 минут
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
#include "iostream"
#include "cstdlib"
#include "cstring"
#include "string"
using namespace std;
int main(){
    unsigned int i=0;
int min=INT_MAX;
cin.get();
string s1,sub;
string razdel=".,;:!? ";
getline(cin,s1);
string::size_type k=0;
int *s2=new int[s1.length()];
s1=s1+" ";
while(k!=string::npos && i!=s1.length()){
        if(isdigit(s1[i])){
            k=s1.find_first_of(razdel,i);
            if(k==string::npos) break;
            sub=s1.substr(i,k-i);
            
            s2[i]=atoi(sub.c_str());
            
            if(min>s2[i])
                min=s2[i];
            i=k;
                        }
        i++;
 
 
    }
 
 
cout<<min;
}
решил=)
Yandex
Объявления
07.05.2010, 14:11     перевод из строк в числа
Ответ Создать тему
Опции темы

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