C++ programozás HELP?!
Az alábbi feldatban kéne segítség! Hogyan kell fájlból olvasást függvénnyel megoldani?
Hogyan tudom nagybetűssé alakítani a szöveget, ha a toupper()számként adja vissza?
Írj egy programot, ami bekér a felhasználótól egy fájlnevet, beolvassa az összes szöveget a fájlból, majd bekér egy másik fájlnevet, és a megadott fájlnéven elmenti az első fájl tartalmát csupa nagybetűssé alakítva. A programban 3 külön függvényben szerepeljen a fájlbeolvasás és a fájlba kiírás, illetve a string csupa nagybetűssé alakítása.
Egy ilyenem van ami nyilvánvalóan nem működik :D
Az egyik fő problémám a fájlból olvasás függvénnyel való megoldása. A másik amint említettem, hogy hogyan lehet legegyszerűbben átalakítani a szöveget nagybetűssé.
(Kérlet ne ítélj el a kódom láttán :) )
#include<iostream>
#include<fstream>
using namespace std;
string beolvas(string fname){
ifstream fn(fname);
if (fn.fail())
cerr<<" A fájl megnyitása nem sikerült!"<<endl;
string szoveg;
fn>>szoveg;
if (fn.bad())
cerr<< "Hiba a beolvasasnal! "<<endl;
return szoveg;
}
string atalakit (string kicsi){
string nagy;
for (int i=0;i<kicsi.size();i++)
nagy.push_back( char(toupper(kicsi[i])));
return nagy;
}
void kiiras(string nagybetus,string fajlnev1){
ofstream kf(fajlnev1);
kf<<nagybetus<<endl;
return;
}
int main(){
string fajlnev;
cout<<" Adj meg egy fajlnevet "<<endl;
cin>> fajlnev;
string text=beolvas(fajlnev);
string nagybetus=atalakit(text);
string fajlnev1;
cout<<" Adj meg egy fajlnevet "<<endl;
cin>> fajlnev1;
kiiras(nagybetus,fajlnev1);
}
Jó egyetem lehet...
"toupper()számként adja vissza"
ez így blődség, a toupper int-et ad vissza, ami egy KARAKTER kódja. Mivelhogy ehhez illene tudni, hogy a toupper nem string-függvény, hanem karakterre van értelmezve.
Állj neki totál előlről, mert marhaság így a kódod.
Amit tegyél: megnyitsz egy fájlt olvasásra (amit kell).
Megnyitod írásra a másikat. Az egyikből olvasol karaktereket EOF-ig. Minden karakter toupper visszatérési értékét írod a másik fájlba. A getchar és putchar függvényeknek van file megfelelője, talán fgetc(??), de ne kövezzetek meg ha más, azt használd.
Nekem így le sem fordul, nem tudom, te hogy csináltad, hogy egyáltalán funkcionális problémáid adódtak. Én nem értek a C++-hoz sem, úgyhogy nem ítélem el a kódodat, egyszerűen megpróbáltam működőképessé kínozni -- ami vállalhatatlan, azért ám viseld te a világ nyelvét, én mosom kezeimet.
A program működik ebben a formájában is, néhány módosítással. Először is, az író/olvasó függvények C-stílusú string paramétert várnak, tehát pl. így hívhatod meg őket:
ifstream fn(fname.c_str());
ofstream kf(fajlnev1.c_str());
Másodszor: Ha az egész sort akarod beolvasni, akkor az egyszerű fn >> szoveg helyett értelemszerűen a sort olvasó függvényt (vagy mifenét) használd, mondjuk így:
getline(fn, szoveg);
Harmadszor: A
for (int i = 0; i < kicsi.size(); i++) feltételben előjeles típust akarsz előjel nélkülivel összehasonlítani, amit legalábbis egy warning erejéig kifogásol a fordító. A kiengesztelésére elfogadható ötletnek tűnik, hogy a ciklusváltozó is unsigned legyen, mert miért ne lehetne:
for (unsigned int i = 0; i < kicsi.size(); i++)
Negyedszer: Mindez egyetlen soron belül dolgozik, ha tehát többsoros szöveget akarsz átalakítani, akkor nyilván ciklusban, EOF-ig kell olvasgatnod és irkálnod, ezzel én nem foglalkoztam.
Ötödször: Nem t'om, C++ hogy van ez, de más nyelvek alapján énnekem hiányzik a fájlok lezárása.
Köszönöm szépen a válaszokat! :)
Mellesleg nem készülök programozónak, nem is ezt tanulom. Most írtam ilyen kódot először, ezért is kértem, hogy ne ítéljetek el :)
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!