KGigi Posted February 21, 2010 Posted February 21, 2010 istream& std::getline( istream& is, string& s ); istream& std::getline( istream& is, string& s, Char delimiter ); Nem feltétlenül kell megadnod méretet.
skybot Posted February 22, 2010 Posted February 22, 2010 Kicsit átdolgoztam a progit: #include<iostream> #include<fstream> #include<string> using namespace std; int main() { //1. feladat: cout << "1. feladat: " << endl; ifstream be("sms.txt"); int ora[100], perc[100], telszam[100]; int k; string uzi[100]; be >> k; for(int i=0; i<k; i++) { be >> ora[i]; be >> perc[i]; be >> telszam[i]; //Na ide kellene egy sor, ami beolvassa a 3 szám után következõ üzenetet. } for(int i=0; i<k; i++) { cout << ora[i] << " " << perc[i]<< " " << telszam[i] << endl; cout << uzi[i] <<endl; } system("pause"); be.close(); return 0; } Amit írtál, úgy nézem, hogy teljesen más módszerrel nyitja meg a fájlt. Így a program szóközönként olvassa be az adatokat a változókba. Arra volna szükség, ha eléri a sor végét, akkor a teljes következõ sort olvassa be. Így sajna leállna az elsõ szó után.
Botond Posted February 23, 2010 Posted February 23, 2010 #include<iostream> #include<fstream> #include<string> using namespace std; int main() { ifstream be("sms.txt"); int ora[100], perc[100], telszam[100]; int k; string uzenet[100], temp; be >> k; for(int i=0; i<k; i++) { be >> ora[i]; be >> perc[i]; be >> telszam[i]; getline(be, temp); getline(be, uzenet[i]); } for(int i=0; i<k; i++) { cout << ora[i] << " " << perc[i]<< " " << telszam[i] << endl; cout << uzenet[i] <<endl; } system("pause"); be.close(); return 0; } A harmadik "be >> ... " fajta beolvasás nem rakta új sorba a mutatót és ezért a sorból megmaradt maradékot "lenyelettem" egy getline-al, így a kövi sorba ugrott a mutató. Igazából a temp tök fölösleges, mert ha kétszer adnék értéket az "uzenet" változónak az is tökéletes lenne, csak gondoltam így átláthatóbb egy kicsit.
Botond Posted February 25, 2010 Posted February 25, 2010 Olyat lehet csinálni, hogy egy függvény több visszatérési értéket adjon vissza?
KGigi Posted February 26, 2010 Posted February 26, 2010 Olyat lehet csinálni, hogy egy függvény több visszatérési értéket adjon vissza? A függvénynek egy visszatérési értéke van, az viszont tetszõleges típusú lehet. Pl. egy általad definiált rekord, ha több dolgot akarsz visszaadni. A mutató kevesebb memóriát zabál, de nehogy olyan mutatót adj vissza, amit csak a függvénytörzsben használsz, mert akkor nagyon csúnya dolgokat fogsz látni.
skybot Posted March 27, 2010 Posted March 27, 2010 Olyant szeretnék csinálni, hogy megszámolom, mennyi szó van egy fájlban. A szavak "sorvége" jellel vannak elválasztva. Nos úgy gondoltam indítok egy ciklust, ami megy a fájl vége jelig, és ha sorvége jelet talál növel egy értéket. Na de hogy adom meg a ciklusnak, hogy sorvégéig, vagy fájlvégéig menjen?
Pjotr Posted March 27, 2010 Posted March 27, 2010 int db=0; char[256] temp; ifstream olvas("fajl.txt"); if(!olvas) {cerr<<"HIBA\n"; exit(1);} while(!olvas.eof()) { olvas.getline(temp,256); db++; }
skybot Posted March 27, 2010 Posted March 27, 2010 Kösz. Nem pont így oldottam meg, de jó ötletet adtál. // Sorok számának megállapítása ifstream szoell("szavak.txt"); int sorsz=0; string sorvege; for(int i=0; !szoell.eof();i++) { getline(szoell,sorvege); sorsz=i; } // vége
BearVsMan Posted March 28, 2010 Posted March 28, 2010 Helo, Lenne egy olyan problémám, hogy egy mátrixban kell megvizsgálnom az oszlopokat, hogy van-e benne 0-a. A 2 C++ megoldo függvényem a következõ: Ha minden oszlopban van nulla akkor lesz igaz. bool Minden_nyelven (const vector < vector <int> > &tanulok) { bool l=false; for (int i=0; !l && i<tanulok.size(); ++i) { if (Nulla (i,tanulok)) l=true; } return l; } Vizsgálja azt, hogy van-e az oszlopban nulla. bool Nulla (int i, vector< vector <int> > tanulok) { bool l=true; int j = 0; int s=0; while(l && j<tanulok[i].size() ){ l=(tanulok[i][j] == 0); j++; } return l; }
arpsoft Posted March 29, 2010 Posted March 29, 2010 Igazából nincs kérdés feltéve, de néhány észrevétel: 1. a Minden_nyelven függvény nem vizsgálja a 0 indexû oszlopot. Szerintem nem ++i, hanem i++ kéne a for ciklusba. 2. a Minden_nyelven függvény nem akkor ad igaz értéket, ha minden oszlopban van nulla, hanem ha az egyikben van nulla.
Botond Posted March 29, 2010 Posted March 29, 2010 Azt hogy lehet megcsinálni konzolos proginál, hogy a program csak egy karaktert fogadjon el a szövegbevitelnél? Mármint nem úgy, hogy csak az első karaktert olvassa be, hanem nem engedi, hogy egynél több karaktert beírjon a felhasználó.
BearVsMan Posted March 29, 2010 Posted March 29, 2010 Igazából nincs kérdés feltéve, de néhány észrevétel: 1. a Minden_nyelven függvény nem vizsgálja a 0 indexû oszlopot. Szerintem nem ++i, hanem i++ kéne a for ciklusba. 2. a Minden_nyelven függvény nem akkor ad igaz értéket, ha minden oszlopban van nulla, hanem ha az egyikben van nulla. Akkor azt hogyan lehetne beírni, hogy akkor azt adja vissza, hogy minden oszlopban van nulla?
arpsoft Posted March 29, 2010 Posted March 29, 2010 bool Minden_nyelven (const vector < vector <int> > &tanulok) { bool l=true; for (int i=0; l && i<tanulok.size(); i++) { l=Nulla (i,tanulok); } return l; }
BearVsMan Posted March 31, 2010 Posted March 31, 2010 Köszi arpsoft. Következõ probléma: Ugyan ilyen oszlopvizsgálat, csak most azt kell visszaadnom, hogy ha mér van egy olyan oszlop aminek az összes eleme nagyobb, mint nulla, akkor igaz. A baj, hogy akkor is igaz választ kapok, ha minden oszlopban van egy nulla. Ennek ugye hamisnak kellene lennie. Specifikacio alapján van elkészítve a 2 megoldó függvény, de mégsem mûködik. pl. 2-----23 0-----82 12----0 bool Minden_nyelven (const vector < vector <int> > &tanulok) { bool l = false; int i=0; while (!l && i<tanulok.size()) { l = (Nem_nulla (i, tanulok)); i++; } return l; } bool Nem_nulla (int i, vector< vector <int> > tanulok) { bool l = true; int j = 0; while (l && j<tanulok[i].size() ){ l = (tanulok[i][j] != 0); j++; } return l; }
KGigi Posted March 31, 2010 Posted March 31, 2010 Sorokat vizsgálsz, és nem oszlopokat. @arpsoft Mi bajod a ++i-vel? Az a jó. Az i++ mielõtt megnöveli i-t, létrehoz róla egy másolatot, amit ha nem használsz fel, akkor azonnal el is dob. A sima növelés az ++i. Nálunk ezért ölnek.
BearVsMan Posted March 31, 2010 Posted March 31, 2010 Akkor hogy írjam át, hogy végre oszlopokat vizsgáljon?
arpsoft Posted April 1, 2010 Posted April 1, 2010 KGigi: az a gondom vele, hogy a ++i és az i++ között van egy hatalmas különbség: ++i: elõször növel, aztán értékel i++: elõször értékel, aztán növel Bár ez lehet, hogy a for ciklusban nem játszik túl nagy szerepet, inkább csak akkor, ha ez állt volna ott: for (int i=0; l && ++i<tanulok.size();) Mert itt már nem mindegy. Itt már csak ez lenne helyes: for (int i=0; l && i++<tanulok.size();)
KGigi Posted April 1, 2010 Posted April 1, 2010 @BearVsMan Egyszerű, a második index legyen rögzített, és ne az első. @arpsoft Ilyenkor valóban számít. De egy sima for ciklusban (int i=0; i < (int)t.size(); ++i) csak egy felesleges másolást generál, ráadásul a ciklusmag minden egyes lefutásakor. Amit te írsz, arra én már egészen biztosan while ciklust írnék, pont az ilyen lehetséges hülye hibák miatt. Alacsony szintű kódban nem lesz különbség, a for ciklus a C++-ban csak egy elfedett while ciklus.
BearVsMan Posted April 1, 2010 Posted April 1, 2010 @BearVsMan Egyszerû, a második index legyen rögzített, és ne az elsõ. Már próbálam így: while (l && j<tanulok[i].size() ){ l = (tanulok[j][i] != 0); j++; } Ugyan úgy rossz eredményt kapok.
KGigi Posted April 2, 2010 Posted April 2, 2010 Persze. Mert nem stimmel a méret. Oszlopon akarsz végigmenni, de a sor hosszáig mész. Igazából miért így csinálod? Írj egy sima egymásba ágyazott ciklust.
Botond Posted April 2, 2010 Posted April 2, 2010 Egy olyan függévnyt keresnék ami kisbetûs string-bõl nagybetûset csinál. Ha csak a string egyik karakterét tudja csak átalakítani, az sem baj. Találtam egy toupper() függvényt, de az valamiért nem akar mûködni
BearVsMan Posted April 2, 2010 Posted April 2, 2010 Persze. Mert nem stimmel a méret. Oszlopon akarsz végigmenni, de a sor hosszáig mész. Igazából miért így csinálod? Írj egy sima egymásba ágyazott ciklust. Azért mert ez prog beadandóm és függvényben a függvény-el kell megoldani. Persze lehet, hogy elfogaja a tanarom úgy is, ha simán megírom 1 függvényben. De már ígyis visszaadta és így már csak 4est kapok ra. Minden esetre megpróbálom az egymásba ágyazott ciklussal. De kíváncsi lennék a 2 függvényes helyes megoldásra is. Csak tanulhatok belõle.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now