Problem z zadaniem - tablica dwuwymiarowa

0

Witam mam pewien problem może wpierw kod :

#include <cstdlib>
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
    int tablica[1000][9];
    string tabp[1000];
    int i=0, k=0,j=0,suma=0;
    ifstream odczyt ("telefony.txt");
    while(!odczyt.eof())
          {
          odczyt>>tabp[i];
          i++;
          }
    odczyt.close();


     stringstream lolek[9000];
     k=0;
        for(i=0;i<1000;i++)
          {
                         for(j=0;j<9;j++)
                         {
                                         lolek[k]<<tabp[i].at(j);
                                         lolek[k]>>tablica[i] [j];
                                         k++;
                                         }
                                         }
//******************************************************************************

     //tu by była pętla for o której piszę
 
 				for(j=0;j<9;j++)
                         {
								if(tablica[0][j] % 2 == 0)
								cout<<tablica[0][j]<<endl;
							    suma=suma+tablica[0][j];
							    cout<<suma<<endl;
							    
							
						 }		
	    	
          
    
    getchar();
    cin.ignore();
    return 0;
}
  

A więc mam plik txt z 1000 numerów telefonów. Muszę mieć sumę parzystych liczb każdego telefonu . Na razie próbowałem to zrobić dla jednego wiersza (czyt. jednego numeru) co prawda liczy dobrze ale zostawia straszny syf na ekranie wypisuje wszystkie liczby. W sumie to jeszcze dało by się znieść ale do tego chciałem dopisać jeszcze pętle for:

for(i=0;i<1000;i++) 

i chciałem otrzymać sumę dla każdego wiersza ale coś nie wychodzi ..

czekam na odpowiedzi :)

0

najpierw zmień ifstream na fstream plik.open("nazwa.rozszeżenie", ios::out(do edycji i odczytu))

0

no ok , ale to tak naprawdę mi nic nie zmienia .

0
#include <iostream>
#include <cstring>
using namespace std;

int main()
  {
   unsigned suma=0;
   ifstream odczyt("telefony.txt");
   char ch;
   while(odczyt>>ch) if(strchr("02468",ch)) suma+=ch-'0';
   odczyt.close();
   cout<<suma<<endl;

   while(getchar()!='\n') {}
   return 0;
  }
0
minimalistyczny napisał(a):

Muszę mieć sumę parzystych liczb każdego telefonu
To znaczy? Policzyć dla każdego numeru z osobna sumę występujących w nim parzystych cyfr?

zakładając, że tak to kilka możliwości:

#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>

using namespace std;

struct Sum {
    Sum(unsigned &r) : res(r) {}

    void operator()(const char &c)
    {
        if(!(c & 1))
            res += c - '0';

    }

    unsigned &res;
};

void foo(const string &str)
{
    unsigned result = 0;

    Sum sum(result);
    for_each(str.begin(), str.end(), sum);

    cout << result << "\r\n";
}

int main()
{
    ifstream file("in");

    if(!file.is_open())
    {
        cerr << "Bład otwarcia pliku!";
        return 1;
    }

    for_each(istream_iterator<string>(file),
             istream_iterator<string>(),
             foo);

    file.close();
    return 0;
}

dla c++11 można tak:

struct Foo {
    void operator()(const string &s) const
    {
        unsigned res = 0;
        for_each(s.begin(),
                 s.end(),
                 [&res](char c) { if(!(c &  1)) res += c - '0'; });

        cout << res << "\r\n";
    }

} foo;

int main()
{
    ifstream file("in");

    if(!file.is_open())
    {
        cerr << "Bład otwarcia pliku!";
        return 1;
    }

    for_each(istream_iterator<string>(file),
             istream_iterator<string>(),
             foo);

    file.close();
    return 0;
}

bądź jeszcze zwięźlej lecz niekoniecznie czytelniej:

int main()
{
    ifstream file("in");

    if(!file.is_open())
    {
        cerr << "Bład otwarcia pliku!";
        return 1;
    }

    for_each(istream_iterator<string>(file),
             istream_iterator<string>(),
             [](const string &s) {
                 unsigned res = 0;
                 for_each(s.begin(), s.end(), [&res](char c) {
                    if(!(c & 1))
                        res += c - '0';
                 });
                 cout << res << "\r\n";
             });

    file.close();
    return 0;
}

pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1