| | |
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Autor | Správa |
---|
| Napísal Eddy: 29.12.2012 15:53 | |
|
Zdravím.Mám textový súbor a v ňom sú zapísané čísla.Potrebujem vypočítať súčet týchto čísiel ,ale iba v jednotlivých riadkoch.Riadky sú rôznej dĺžky. Napadli ma dva spôsoby ako túto úlohu riešiť: 1. Uložiť si ich do poľa spôsobom f >> pole[100].Tu ale mám problém ,že neviem otestovať kedy nastane koniec riadku.Nič také ,ako if(f == '\n') nefunguje. 2. Pomocou príkazu getline si ich uložiť do stringu. Lenže následne neviem ako dané čísla z toho stringu mám vytiahnuť aby som ich mohol spočítať. .... Prosím o radu.Ďakujem.
|
|
Registrovaný: 06.11.08 Prihlásený: 06.09.21 Príspevky: 3091 Témy: 84 Bydlisko: Trnava | Napísal Denco1: 29.12.2012 16:07 | |
|
A čo tak čítať súbor po znakoch? Vtedy by ti mal zareagovať na podmienku s '\n'.
|
|
| Napísal autor témy Eddy: 29.12.2012 16:40 | |
|
Veď to je ten prvý spôsob,čo som skúšal.Ja si načítavam čísla po jednom a zapisujem si ich postupne do poľa...... nezáleží na tom či ich dávam do poľa ,alebo ich vypisujem priamo po znaku.Tá podmienka s '\n' proste nefunguje.
|
|
Registrovaný: 06.11.08 Prihlásený: 06.09.21 Príspevky: 3091 Témy: 84 Bydlisko: Trnava | Napísal Denco1: 29.12.2012 16:49 | |
|
A prečo pole? Nestačí premenná typu char?
//I keď s polom by sa potom možno lepšie robilo ...
|
|
Registrovaný: 14.05.08 Prihlásený: 16.06.23 Príspevky: 99 Témy: 14 Bydlisko: Prievidzaaa... |
Nie som si istý ako je to v C++ ale malo by to byť podobné ako v C: Máš dve možnosti: 1. buď si to uložíš do stringu ako si povedal a potom budeš vo "for" cykle prirátavať do nejak premennej každú hodnotu až kým x != '\n', pričom k jednotlivým indexom stringu budeš pristupovať cez riadiaciu premennú cyklu (typicky "i"). 2. alebo nemusíš mať žiaden string a budeš tie údaje priamo čítať zo súboru, pričom pokým tá hodnota nie je '\n' tak to pripočítaš do sumy. A ak sa rovná novému riadku tak si vytvoríš premennú sum pre nový riadok a zase ideš od začiatku. predpokladám že pracovať so súbormi vieš
_________________ MB: MSI Z170I GAMING PRO AC CPU: i-5 6600K @3.50GHz GPU: MSI GeForce GTX 970 GAMING 4G RAM: 2x 8GB DDR4 3600 MHz PSU: EVGA 750G2 SSD: SAMSUNG 850 EVO 250GB HDD: 2TB Keyboard: Logitech G915 Mouse: Logitech G502 Audio: Microlab SOLO 9C + Kingston HyperX Cloud Alpha |
|
Registrovaný: 11.01.09 Prihlásený: 25.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | Napísal Fico: 29.12.2012 19:03 | |
|
Prilis to komplikujete. Staci precitat konkretny riadok do premennej typu string a potom: Kód: #include <iostream> #include <sstream>
using namespace std;
int main() {
int tmp, result = 0; istringstream line("10 11 12 33"); /* v tejto premennej budes mat nacitany konkretny riadok, s ktorym chces pracovat, tuna su nahodne cisla len pre ilustraciu */
while ( !line.eof() ) { line >> tmp; result += tmp; }
cout << result << endl; return 0; }
_________________ Ak potrebujete pomoc s diagnostikou/opravou vasej elektroniky ( notebook, motherboard, GPU, a ine ), kontaktujte ma cez SS. |
|
| Napísal autor témy Eddy: 31.12.2012 17:40 | |
|
Robil som to tým systémom,ako to ukazoval "fico".Pochopil som ako to funguje,lenže aj tak neviem prísť na to ,akú chybu mám v mojom kóde.Môj program mi dokáže správne vypísať prvý riadok na obrazovku a vypočítať súčet prvkov v prvom riadku.Pri opakovaní cyklu pre dalšie riadky to nefunguje..... Kód: fstream f; string str; stringstream riadok; int sucet = 0,i; f.open("vstup.txt"); while( ! f.eof() ){ getline(f,str); riadok << str; cout << riadok.str(); while( ! riadok.eof() ){ riadok >> i; sucet = sucet + i; } cout << " - Sucet prvkov v riadku je " << sucet << endl; riadok.str(""); sucet = 0; i = 0; } f.close(); Ked ale odstránim z kódu tú časť cyklu,kde počítam súčet riadku ,tak mi ten program správne vypíše na obrazovku všetky riadky...Vedel by niekto poradiť kde mám chybu?Dúfam že som to dobre vysvetlil...
|
|
Registrovaný: 27.12.08 Prihlásený: 13.12.22 Príspevky: 1874 Témy: 96 Bydlisko: Bratislava,... | Napísal nBXXL: 01.01.2013 1:08 | |
|
http://www.cplusplus.com/reference/sstr ... tream/str/ : Citácia: Notice that setting a new string does not clear the error flags currently set in the stream object unless the member function clear is explicitly called. EOF je tzv. "error flag" stream-u, tym, ze vymenis string v stringstream-e, sa nezmazu error flag-y, pokial je nastaveny nejaky error flag, stream sa nesprava tak ako by sa mal spravat, musis ich zmazat volanim riadok.clear();
_________________ ~Listen to your brain, not your heart~ NB1: Lenovo Y500: CPU: Intel Core i7-3630QM; GPU: nVidia GT650M 2GB SLi; RAM: 16GB DDR3; HDD: 1TB + 256GB SSD (m4); LCD: 15,6" 1920x1080; OS: Win8.1 64-bit + Arch Linux 64-bit (UEFI Powered DualBoot) NB2: Asus K53SJ-SX093: CPU: Intel Core i3-2310M; GPU: Intel HD3000 / nVidia GT520M 1GB Optimus; RAM: 8GB DDR3; SSD: 128GB 840Evo; LCD: 15,6" 1366x768; OS: Win 8.1 Pro 64-bit (UEFI) |
|
Registrovaný: 14.03.11 Prihlásený: 02.08.23 Príspevky: 814 Témy: 23 Bydlisko: Bratislava |
Hmmm nespočítava to číslice? A nebolo zadanie spočítať čísla?
|
|
| Napísal autor témy Eddy: 16.01.2013 22:51 | |
|
Po dlhšom čase sa znova ozývam,kedže som sa k tomu až teraz dostal... bude to asi posledna vec čo budem potrebovať ,za ostatne rady ďakujem. dajme tomu že takto sú zapísané čísla v mojom súbore Kód: 2 -3 8 5 0 3 5 1 2 -2 3 1 7 6 5 -3 15 0 1 Keď ich chcem však vypísať na obrazovku ,posledné číslo sa mi vypíše dvakrát: Kód: 2 -3 8 5 0 3 5 1 2 -2 3 1 7 6 5 -3 15 0 1 1 Kód: int a; string str; stringstream riadok; while ( ! f.eof() ) { getline(f,str); riadok << str; while( !riadok.eof() ){ riadok >> a; if(f.eof()){ break; } else{ cout << a << " "; } } cout << endl; riadok.clear(); riadok.str(""); } f.close(); skúšal som aj také niečo ako if(f.eof() && riadok.eof()) ... ale nič také nefunguje ..ďakujem
|
|
| Stránka: 1 z 1
| [ Príspevkov: 10 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| C Testovanie prvočíselnosti v Assembler, C, C++, Pascal, Java | 4 | 690 | 23.10.2011 13:50 PipoPP | | testovanie prvku pola char [C++] v Assembler, C, C++, Pascal, Java | 6 | 482 | 06.07.2010 8:09 koso | | C - viac vstupov v 1 riadku v Assembler, C, C++, Pascal, Java | 2 | 331 | 01.02.2016 20:14 faraon | | C++ Hlavickovy subor vs Hlavickovy subor s CPP suborom (Alebo deklaracia a definicia tried v1 alebo 2och suboroch) v Assembler, C, C++, Pascal, Java | 5 | 611 | 19.06.2017 21:16 BX | | zoznam textovych suborov v Ostatné programy | 2 | 308 | 07.08.2013 15:06 nBXXL | | Drupal 7 - Sprava textovych formatov v Redakčné systémy | 2 | 442 | 13.07.2012 1:12 Strýco Mat | | Ruská vízia konca sveta v Spoločnosť, politika, psychológia, filozofia, náboženstvo | 25 | 1599 | 17.11.2012 0:35 silentasflash | | Info o súboroch v PHP, ASP | 2 | 452 | 07.02.2008 20:09 tatysp | | Virus v systemovych suboroch v Antivíry a antispywary | 5 | 329 | 26.09.2014 19:49 Mandy | | Identifikovanie elementov v php súboroch v HTML, XHTML, XML, CSS | 8 | 273 | 16.05.2014 7:27 don jebot | | Problém s zobrazením skrytých súboroch v Operačné systémy Microsoft | 4 | 532 | 21.12.2008 21:09 OmeGa | | Rocnikova praca v suboroch (Pascaaaaal) v Assembler, C, C++, Pascal, Java | 17 | 1551 | 02.06.2007 16:17 audiotrack | | Do konca mesiaca nás bude 7 mld v Spoločnosť, politika, psychológia, filozofia, náboženstvo | 24 | 1425 | 31.10.2011 20:55 NesTon | | Open office popisky V xls suboroch v Ostatné programy | 0 | 317 | 01.06.2015 21:01 04Miro84 | | PC s predinštalovanými XP iba do konca roka v Novinky | 14 | 599 | 13.04.2007 19:56 johny128 | | Masívne zvyšovanie kapacity HDD Seagate do konca dekády v Novinky | 1 | 498 | 20.03.2012 13:04 delong |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|