Non so se questa è la sezione giusta, io ci provo, in caso contrario scusatemi!
allora questo è l'esercizio in c++ che non riesco a risolvere:
Sia dato un file di testo contenteti il numero di righe,
il numero di colonne e gli elementi di una matrice di stringhe.
Si scriva un programma che produca e stampi a video una nuova matrice
ottenuta cancellando prima le righe formate da stringhe tutte uguali
e poi le colonne formate da stringhe tutti uguali.
Esempio file di input:
3
3
Carlo
Carlo
Carlo
Carlo
Marco
Gianna
Carlo
Barbara
Rina
si ottiene in uscita la matrice
Marco, Gianna
Barbara, Rina
Chi mi da una mano? Magari se mi spiegaste la logica da applicare....
Grazie! ;)
Allora ho scritto questo:
#include<iostream>
#include<fstream>
#include<string>
#include<cstdlib>
#define MAX 20
typedef char stringhe[MAX];
typedef stringhe Matrice[MAX][MAX];
Matrice M;
using namespace std;
int main()
{
int a=0,b=0,number[2];
fstream file;
file.open("nomi",ios::in);
for(int i=0;i<2;i++)
{
file>>number[i];
}
do
{
file>>M[a][b];
b++;
if(cin.get()=='\n')
{
a++;
b=0;
}
}while(!file.eof());
file.close();
for(int k=0;k<a;k++)
{
for(int j=0;j<b;j++)
{
cout<<M[k][j];
}
}
return 0;
}
e già mi blocco, infatti non riesco poi a visualizzare ciò che ho scritto nella matrice...
Comunque ti consiglio di leggere così i file:
//-- nome del file da leggere direttamente nella dichiarazione....puoi metterlo anche dopo...
ifstream f("file.txt");
//-- stringa di caratteri
string str;
//-- un controllo non fa mai male...
if(!f) {
cout<<"File inesistente!Crearlo se necessario";
return -1;
}
//-- finchè il codice trova qualcosa da leggere
while(f.good())
{
//-- legge riga per riga e salva il contenuto nella stringa
getline(f, s);
//-- copia la stringa nella matrice
strcpy (m[a][b],s);
}
//-- chiude f
f.close();
return 0;
}
Quello che ti ho scritto è un esempio...come vedi non ho gestito la localizzazione degli indici della matrice.....se hai problemi chiedi pure...
Ok, sto provando a farla più difficile di quanto sembri....e ovviamente non va....
Allora ho inserito un paio di cose, suddividendo il programma in vari files:
header.h
#ifndef HEADER_H
#define HEADER_H
#include<iostream>
#include<fstream>
#include<cstdlib>
#define MAX 20
typedef char Matrice[MAX];
typedef Matrice nomi[MAX][MAX];
class Editing
{
int number[2];
nomi M;
public:
void lettura();
void scrittura();
};
#endif
lettura.cpp
#include"header.h"
using namespace std;
void Editing::lettura()
{
int c=0,r=0;
fstream file;
file.open("nomi",ios::in);
if(!file)
{
exit(1);
}
for(int i=0;i<2;i++)
{
file>>number[i];
}
do
{
file>>M[c][r];
r++;
if(r==number[1])
{
c++;
r=0;
}
}while(!file.eof());
file.close();
}
scrittura.cpp
#include"header.h"
using namespace std;
void Editing::scrittura()
{
for(int c=0;c<number[0];c++)
{
for(int r=0;r<number[1];r++)
{
cout<<M[c][r]<<"\t";
if(r==number[1]-1)
{
cout<<M[c][r]<<endl;
}
}
}
}
main.cpp
#include"header.h"
using namespace std;
int main()
{
Editing lettura();
Editing scrittura();
return 0;
}
tuieni però presente che di classi ne so pochissimo ho appena cominciato a studiarle quindi potrebbero esserci errori stupidi.
Ovviamente sono tutt'orecchie, mmm, no direi più tutt'occhi!!!!