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

Посимвольное чтение - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 40, средняя оценка - 4.70
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
01.12.2011, 20:49     Посимвольное чтение #1
В консоль подается текст содержащий такие выражения:
а=3 b=7
z=32 a=1
y=2

b=7
"EOF"-конец.
программа не обращает внимание на количество пробелов и отступов.
после прочтения текста, программа должна вывести таблицу:
среднее значение сумма
а 2 4
b 7 14
y 2 2
z 32 32

Добавлено через 5 минут
вопрос состоит в том, как организовать запись значения переменной в массив?
допустим я хочу переменную 'а' записать в массив arr['a'] и присвоить ей значение переменной после знака '='.
C++
1
2
3
4
5
6
7
8
char c;
char a[4];
cin.get(c);
while(cin)
{
if(c>='a' && c<='z')
cin.get(c),a['c']=cin.get(c);
}
что-то вроде этого, но ведь еще надо подсчитывать количество записей, что бы найти среднее значение
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2011, 20:49     Посимвольное чтение
Посмотрите здесь:

C++ как заполнить файл и как осуществить посимвольное чтение
Посимвольное сравнение C++
Посимвольное краска C++
C++ посимвольное считывание
C++ посимвольное чтение из файла
C++ Посимвольное чтение строки типа string
как создать посимвольное чтение строки и загнать в массив C++
C++ Посимвольное чтение массива char

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gooseim
Эксперт C++
500 / 404 / 35
Регистрация: 23.09.2010
Сообщений: 1,139
01.12.2011, 22:22     Посимвольное чтение #2
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
#include <iostream>
#include <string>
#include <boost/regex.hpp>
#include <algorithm>
#include <map>
#include <list>
#include <boost/lexical_cast.hpp>
#include <numeric>
#include <functional>
 
int main()
{
   std::string s = "a=3 b=7\n"
                   "z=32 a=1\n"
                   "y=2\n"
                   "b=7\n";
   
   boost::regex reg("((\\w)\\s*=\\s*(\\d+))"); 
   
   boost::smatch res;
   
   std::map< char, std::list<int> > v;
   
   std::map< char, double> amean;  
   std::map< char, int > sum;  
      
   std::string::const_iterator start = s.begin();
   std::string::const_iterator end = s.end();
   
   while( boost::regex_search(start , end , res, reg) )
   {
      v[res[2].first[0]].push_back(boost::lexical_cast<int>(std::string(res[3])));
      start= res[1].second;
   }
 
   for(std::map< char, std::list<int> >::iterator it = v.begin(); it != v.end(); ++it)
   {      
      sum[it->first] = std::accumulate(it->second.begin(), it->second.end(), 0);
      amean[it->first] = (double)sum[it->first] / it->second.size();      
   }
   
   for(std::map< char, std::list<int> >::const_iterator it = v.begin(); it != v.end(); ++it)
   {
      std::cout<<it->first<<" ";
      std::cout<<amean[it->first]<<" "<<sum[it->first]<<std::endl;
   }
}
Работу с файлами сами доделайте.
xexew
0 / 0 / 0
Регистрация: 22.02.2011
Сообщений: 76
01.12.2011, 23:53  [ТС]     Посимвольное чтение #3
спасибо) все как-то сложно)
вот мое
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
#include <iostream>
 
using namespace std;
 
void main()
{   const int n=24;
    char c;
    int tmp, a[n], b[n];
    for(int i=0; i<n; i++)
        b[i]=0;
    for(int i=0; i<n; i++)
        a[i]=0;
    cin.get(c);
    
    while(cin)
    {
        if(c>='a' && c<='z')
            tmp=(int)(c-'a'),
            cin.get(c),cin.get(c),
            a[tmp]+=(int)(c-('a'-'1')),b[tmp]++;
        
        else
            cin.get(c);
 
    }
    for(int i=0; i<n; i++)
    {
        if(a[i])
            cout<<"kolichestvo "<<(char)(i+'a')<<"= "<<b[i]<<" summa= "<<a[i]<<" srednee znachenie= "<<a[i]/b[i]<<endl;
        else 
        {
                   while(a[i]==0)
                         i++;
                }
    }
 
    return 0;
}
и у меня вопрос, так как в тексте вводятся не все латинские буквы, то некоторые элементы массива не надо выводить, как сделать так что бы программа выводила только ненулевые элементы массива? в моей программе я написал вот это:
C++
1
2
3
4
5
6
7
8
9
for(int i=0; i<n; i++)
    {
        if(a[i])
            cout<<"kolichestvo "<<(char)(i+'a')<<"= "<<b[i]<<" summa= "<<a[i]<<" srednee znachenie= "<<a[i]/b[i]<<endl;
        else 
        {
                   while(a[i]==0)
                         i++;
                }
Yandex
Объявления
01.12.2011, 23:53     Посимвольное чтение
Ответ Создать тему
Опции темы

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