Új hozzászólás Aktív témák
-
Jester01
veterán
válasz WonderCSabo #800 üzenetére
Az én linuxaimon nem megy, tekintve, hogy
A locale name is typically of the form
language[_territory][.codeset][@modifier], where
language is an ISO 639 language code, territory is
an ISO 3166 country code, and codeset is a character
set or encoding identifier like ISO-8859-1 or UTF-8.[ Szerkesztve ]
Jester
-
Jester01
veterán
válasz WonderCSabo #802 üzenetére
Definiálnád a "megy" kifejezést? Beállít értelmes locale-t? Mert ugye mint említettem, hibakezelés nincs a programban, tehát ha nem megy azt se lehet észrevenni.
Jester
-
WonderCSabo
félisten
válasz Jester01 #803 üzenetére
Úgy megy, hogy normálisan kezeli a magyar ékezetes betűket.
Így meg le is lehet ellenőrizni:
printf ("Locale is: %s\n", setlocale(LC_ALL,"Hun") );
Szerk.: Nem úgy értettem, hogy ebben a programban megy, hanem úgy általában, mert régebben már kipróbáltam és ellenőriztem.
[ Szerkesztve ]
-
Sk8erPeter
nagyúr
Hali!
Van egy kérdésem fájlkezeléssel és a standard bemenet objektumként való kezelésével kapcsolatban. Jól jönnének az ötletek!Van egy File osztályom, amiben a számomra szükséges metódusokat valósítom meg fájlkezeléssel kapcsolatban, és az osztály konstruktorának van egy default NULL értékkel ellátott paramétere - a konstruktornak át lehet adni egy fájlnevet, amit ugyanitt a konstruktorban majd megnyitok, stb.
Ha a paraméter üres (NULL), akkor majd a standard inputról kellene olvasnom.
A konstruktor fejléce így néz ki:
File(const char * filename=NULL);A fájlkezeléshez létrehoztam egy
ifstream file_to_process;
tagváltozót (private), ez lesz az, amibe majd megnyitom a fájlt, amiből olvasok, stb., a standard inputról meg getchar-ral olvastam - ez viszont, ha már OOP, nem egy túl elegáns megoldás, ezért gondoltam arra, hogy akkor a változót istream-mé kéne tenni, ennek úgyis származtatott osztálya az ifstream, majd megoldom úgy - és akkor végül is a cin-t objektumként kezelem.
Ezért átalakítottam így:
istream file_to_process; //ifstream helyett!Na de most az a para, hogy viszont így a korábban létrehozott metódusok nem működnek, az olyanok, mint pl. a következő:
file_to_process.open(filename, ifstream::in) //vagy ios::in ???Hogyan tudnám ezt a legegyszerűbben megoldani, hogy ezek a metódusok működjenek istream-mel is?
Előre is köszi az ötleteket!
Remélem valamennyire érthetően írtam, ha nem, kérdezzetek, köszi![ Szerkesztve ]
Sk8erPeter
-
Jester01
veterán
válasz Sk8erPeter #805 üzenetére
Nyilván csak azok működnek amik nem fájl-specifikusak. Az open-t még ott hívd meg amikor létrehozod a stream-et, olyankor még tudod, hogy az ifstream. Később már csak olyanokat illik használni amik sima istream-re is működnek. Ha nagyon muszáj, akkor pl. dynamic_cast segítségével (vagy valami bool adattaggal) csinálhatsz elágazást. Persze ha sok ilyen kell akkor érdemesebb inkább 2 fajta File osztály implementációt készíteni, közös őssel.
Jester
-
Sk8erPeter
nagyúr
válasz Jester01 #806 üzenetére
Hali!
Köszi a választ!A parám igazából éppen az, hogy ha átírom az ifstream típust istream-re, akkor a fordító már jogosan pampog, hogy miért akarok mondjuk egy close() függvényt egy ilyen tagváltozóra meghívni.
A legtöbb függvényem tulajdonképpen elsősorban fájl-specifikus, van olyan metódus, ami megnyit, van olyan, ami bezár (direkt itt nyitom meg, és nem mondjuk a main()-ből, hogy rugalmasabb legyen!), van olyan, ami megmondja a fájl méretét, fájl elejére vagy végére ugrik (a clear() metódus nélkül a fájlvégre éréskor már nem megy a seekg()-vel a fájlméret-lekérdezés, ezért tartottam érdemesnek külön függvénybe bepakolni), és így tovább.Ez a dolog egyébként a linuxos tail program megvalósításához kellene, aminek a feladat-kiírását korábban itt írtam: [link]
A standard inputról olvasás itt akkor kellene, amikor a júzer nem ad meg fájlnevet paraméterként - épp, ahogy a Linuxon is működik a tail.
Na, és a fájlkezelést, valamint egy tároló feltöltésének függvényét is bepakoltam ebbe a File osztályba, amit említettem, és gondoltam ha a paraméterben nincs megadott fájlnév, akkor lehetne cin-ről olvasni.Akkor szerinted érdemes inkább a standard inputról olvasásra külön osztályt létrehozni?
Sk8erPeter
-
Sk8erPeter
nagyúr
"A fajlmeret-beolvasas nem mukodik"
Már miért ne működne?
Legfeljebb akkor lehet gond, ha már fájl végéhez értünk (pl. egyszer már beolvastuk az állományt), de ekkor kiadsz egy clear()-t, és megint menni fog.Fájlméret-lekérdezés:
ifstream file_to_process("test.dat" , ifstream::in);
//fájl elejéhez ugrás:
if( (int)file_to_process.tellg() != 0) //ha nem az elején vagyunk
file_to_process.clear(); //ha EOF-hoz értünk, már nem menne enélkül...
//elejére ugrunk
file_to_process.seekg(0, ios::beg);
//végére ugrunk
file_to_process.seekg(0, ios::end);
//hol tart?
long length =(long) file_to_process.tellg();
//méret kiírása
cout<<"File merete: "<<length<<" byte"<<endl;[ Szerkesztve ]
Sk8erPeter
-
nagyúr
válasz Sk8erPeter #808 üzenetére
En ugy ertettem, hogy ha minden szot kulon elemkent kezelsz, akkor a fajl merete nem fog sokat mondani arrol, hogy mekkora tombre van szukseged.
while (!sleep) sheep++;
-
nagyúr
válasz Sk8erPeter #810 üzenetére
Tudom en, hogy tudod, csak hidd el, hogy en is tudom
[ Szerkesztve ]
while (!sleep) sheep++;
-
j0k3r!
senior tag
hello!
a multkori pelda utan elbizonytalanodtam, hogy mikor milyen 'tipusu' valtozok idealisak egyes feladatokra. evvel kapcsolatban van valakinek valami jegyzete (pdf,doc,html barmi jo), ahol le lenne irva, hogy milyen celokra altalaban milyen 'tipust' kellene hasznalni?
'tipus' alatt azokat ertem, amit elvileg a foiskolan 'tanitottak' (itt a tanitottak szo eleg nagy tulzas), pl.: vector, string, list, stb.
elore is koszonom, ha valaki tudna segiteni.some men just wanna watch the world burn...
-
Sk8erPeter
nagyúr
Innen letölthetsz C++-os jegyzeteket (előadónk oldala), a lényeg röviden elég jól benne van mindegyik anyagrészből: [link] (most épp le tudod tölteni, félév elején eltűnnek a linkek (mondjuk a cím elérhető), hogy lehessen látni, épp hol tartunk)
(#811) emvy: tudom én, hogy tudod.
Sk8erPeter
-
Sk8erPeter
nagyúr
Egyébként a vector, string és ehhez hasonlók az STL-tárolók témakörbe tartozik.
Igen nehéz lenne általánosan megfogalmazni, mikor melyik típus jó, de pl. a vector egy olyan osztály, amelynek sablonparaméterként át lehet adni a típust. Elég hasznos, mert így szinte bármilyen adattípust tudsz kezelni (egész számok, karakterek, karaktertömbök, stb.).Sk8erPeter
-
j0k3r!
senior tag
válasz Sk8erPeter #813 üzenetére
koszonom szepen, atnezem oket!
some men just wanna watch the world burn...
-
Mr. Teddy
őstag
Sziasztok!
Egy olyan problémám volna, hogy egyszerűen képtelen avgyok beállítani azt, hogy ami progit Visual C++ban írok az menjen más gépen is. Konfigurációs hibát ír.
Két proginál sem megy.
Egyik egy sima "hello world" teszt képpen, ami sima konzol alkalmazás. A másik már érthetőbb okokból nem megy, egy windows form managed c++t tartalmazó progi. Utóbbi akkor sem megy ha a .Net frameworköt és a Visual C++ 2008 SP1 Redistributable Package-et felteszem. -
sghc_toma
senior tag
válasz Mr. Teddy #818 üzenetére
a nativ alkalmazasnak az a baja, hogy nem talalja a megfelelo verzioju c runtime-ot.. legegyszerubben ugy tudod megoldani, hogy statikusan linkeled a crt-t: [link]
arrol lovesem sincs, hogy a managed cucc miert nem megy.. biztosan ugyanaz a .Net framework van fent a ket gepen?in asm we trust
-
-
Nyiscsák
aktív tag
Van nekem egy olyan feladatom hogy meg kell vizsgálni egy mondatról hogy palindrom-e vagy sem. Ez mind oké csak hogy nekem úgy működik ha nem írok szóközt és nem tudom hogy lehetne a szóközöket kiszedni
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char str[100];
bool pal;
cout<<"Kerem a szoveget:";
cin>>str;
int x = strlen(str)-1;
for(int i=0; i<=x; i++)
{
if(str[i] == str[x-i])
{
pal = true;
continue;
}
else
{
pal = false;
break;
}
}
if(pal == true)
cout<<"Palindrom"<<endl;
else
cout<<"Nem palindrom"<<endl;
getch();
}Minden segítséget köszönök előre is!
-
ArchElf
addikt
válasz Nyiscsák #822 üzenetére
Szerintem ellenőrzés előtt szedd ki belőle a szóközöket, és írásjeleket, kisbetűsítsd az egészet és engedékeny esetben í->i, ó->o, ő->ö, ú->u, ű->ü; dupla/tripla betűk egynek számítanak: cs, dz, dzs, gy, ly, ny, ty, sz, zs
Ja és van 100 karakternél hosszabb (nem értelmes) palindrom is
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
ArchElf
addikt
válasz Nyiscsák #825 üzenetére
Legprimitívebben, hogy egyesével végigmész a pufferen, és mindent áttöltesz egy temp bufferbe. Ha szóköz, vagy írásjel jön, akkor azt nem töltöd át.
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
-
Sk8erPeter
nagyúr
válasz Nyiscsák #822 üzenetére
Ilyen feladat itt megtalálható megoldva: InfoC (BME)
(Ez itt sima C.)
#include <stdio.h>
#include <string.h>
void megfordit(char t[]);
void spacetelenit(char t[]);
int main(){
char hello[]="indul a gorog aludni";
char masolat[50];
spacetelenit(hello);
strcpy(masolat, hello);
megfordit(masolat);
if (strcmp(hello, masolat)==0)
printf("Ez egy palindrom!\n");
else
printf("Nem palindrom.\n");
}
//Szóközöket ne vegyük figyelembe
void spacetelenit(char t[])
{
int honnan, hova;
hova=0;
/* végigmegyünk az összes karakteren */
/* "honnan" mindig nő, "hova" csak néha */
for (honnan=0; t[honnan]!=0; honnan++)
/* és ami nem space, másoljuk */
if (t[honnan]!=' ') { /* NEM 32, hanem ' '! */
t[hova]=t[honnan];
hova++;
}
t[hova]=0; /* a papagáj egyből: "lezáró NUL!" */
}
//String megfordítása
void megfordit(char t[])
{
int hossz;
int i;
hossz=strlen(t);
/* csak a feléig forgatunk, különben visszafordítanánk */
for (i=0; i<hossz/2; ++i) {
char temp;
temp=t[i]; /* három lépéses csere */
t[i]=t[hossz-1-i];
t[hossz-1-i]=temp;
}
/* lezáró NUL? van, mert maradt a helyén. */
}Sk8erPeter
-
sghc_toma
senior tag
C++-ul:
#include <algorithm>
#include <string>
// ...
bool isPalindrom(std::string str)
{
str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
transform(str.begin(), str.end(), str.begin(), ::tolower);
std::string reversed(str);
std::reverse_copy(str.begin(), str.end(), reversed.begin());
return !str.compare(reversed);
}[ Szerkesztve ]
in asm we trust
-
Nyiscsák
aktív tag
Köszönöm szépen mindenkinek! Sikerült megoldani!
-
papa019
senior tag
Sziasztok!
Olyan kérdéssel fordulnék hozzátok, hogy egy osztály elemeit "vector<>" template fv.-ben tárolom. És a vektorom elemeit szeretném rendezni az osztályomban lévő "char* name;" változók alapján. Ezt milyen fv.-el tudom véghezvinni?
Üdv: Papa019
-
papa019
senior tag
válasz Jester01 #831 üzenetére
Eddig oké, csak nem tudom felparaméterezni. :S
van egy vektorom így: "vector<Product*>store".Ekkor ugye a sort első két paraméterével így néz ki:
"sort(store.begin(),store.end())"Viszont a 3. paramétert nem tudom hogy írjam meg... Írtam összehasonlító operátorokat a Product osztályba, de azokat nem tudom betenni paraméternek, mert a sort függvény sír, hogy két paramétert vár és 3-at adnék neki.
Valaki vmi ötlet? :$ -
Jester01
veterán
Ha tényleg nem szereti a 3 paraméteres változatot akkor ott valami gubanc van a fordítási környezettel mert az összes fellelhető dokumentáció azt állítja hogy ez szabványos. Ha a környezettel nem tudsz mit kezdeni akkor nincs más hátra mint előre, és írni egy a követelményeidnek megfelelő rendezést kézzel.
Jester
-
sghc_toma
senior tag
ha irtal kisebb operatort, akkor nem kell harmadik parameter, mivel a sort alapbol azt hasznalja.. tehat pl. ennek igy mukodnie kell:
#include <vector>
#include <algorithm>
class Product
{
//...
int value;
public:
friend bool operator<(const Product & p1, const Product & p2);
}
bool operator<(const Product & p1, const Product & p2)
{
return p1.value < p2.value;
}
int main()
{
std::vector<Product> products;
//...
std::sort(products.begin(), products.end());
return 0;
}[ Szerkesztve ]
in asm we trust
-
papa019
senior tag
válasz sghc_toma #834 üzenetére
Valamiért nem működik még mindig, pedig így csináltam...
Viszont ha az operátor const referenciákat kap, akkor hibát ad erre a megoldásra...
Viszont nekem nem int értékeket kell rendezni, hanem char* értékek alapján...
meg hiába friend az operátor az osztályomban, a name változót sehogyan sem érem el, így a get_name() fv.-t használom.És az a legnagyobb baj, hogy a sort fv. meg se hívja az operátorom... :S
-
sghc_toma
senior tag
a Termekek.h-ban van egy ilyen:
Product& operator<(Product& j1,Product& j2);
ez ugye nem OK, bool a helyes visszateresi ertek..meg egy ilyen:
return strcmp(j1.get_name(),j2.get_name());
ez nem jo, mert akkor igaz, ha nem egyenlo a ket nev, nem akkor, amikor az elso kisebb..
Es ami a fo problema: a vektorban ugye pointereket tarolsz, az operator< meg referenciakkal dolgozik, ez igy nem okes.. tehat kell egy osszehasonlito fv., ami valahogy igy nez ki:
bool compare(Product * p1, Product * p2)
{
return strcmp(p1->get_name(), p2->get_name()) < 0;
}ezt megadhatod harmadik parameternek a sort-nak..
remelem nem neztem el semmit (kicsit sietve futottam at a kodot, eppen beadandot irok )in asm we trust
-
papa019
senior tag
válasz sghc_toma #838 üzenetére
köszi már majdnem jó...
Az operátort kitöröltem, gondolom a compare fv. mellett arra már nincsen szükség...
De a fordító ezt írja ki:
1>Termekek.obj : error LNK2019: unresolved external symbol "bool __cdecl QuickFrozen::compare(class QuickFrozen::Product *,class QuickFrozen::Product *)" (?compare@QuickFrozen@@YA_NPAVProduct@1@0@Z) referenced in function "public: void __thiscall QuickFrozen::Store::sort_by_name(void)" (?sort_by_name@Store@QuickFrozen@@QAEXXZ)
1>D:\Egyetem\2. félév\Programozás alapjai 2\NagyHF\nhf\Debug\nhf.exe : fatal error LNK1120: 1 unresolved externals -
sghc_toma
senior tag
hm.. fura, nalam fordul.. itt vannak a diff-ek a pastebin-es kodhoz kepest:
diff Termekek.h Termekek_mine.h
158c158
< Product& operator<(Product& j1,Product& j2);
---
> bool compare(Product * j1, Product * j2);diff Termekek.cpp Termekek_mine.cpp
482c482
< sort(store.begin(),store.end());
---
> sort(store.begin(),store.end(), compare);
485c485
< bool operator<(Product& j1,Product& j2)
---
> bool QuickFrozen::compare(Product * j1, Product * j2)
487c487
< return strcmp(j1.get_name(),j2.get_name());
---
> return strcmp(j1->get_name(), j2->get_name()) < 0;ja, es a main fuggvenyed void visszateresi erteku.. ez nem okes, int-nek kene lennie.. nem is ertem, a cl miert nem szol erte (W4-gyel sem)..
in asm we trust
-
harry
veterán
Sziasztok, tudnátok ebben segíteni? [link]
Köszönöm.Theoretically, this damn thing oughta work now.
-
icespeak
csendes tag
Helló!
A segítségeteket szeretném kérni az alábbi programban. Az lenne a feladat, hogy egy origóból induló vektorral eltoljam a megadott köröket. Megadjuk a vektor végpontját a körök középpontját és a sugaraikat. Csak valamiért nem megy.[B]main.cpp[/B]
#include <iostream>
#include <vector>
#include "read.h"
#include "pont.h"
#include "kor.h"
#include "vektor.h"
#include <string>
using namespace std;
int main()
{
double d,e,r,x,y,u,k;
cout<<"Adja meg a vektort\n";
cout<<"d= "; cin>>d;
cout<<"e= "; cin>>e;
int n=ReadInt("\nKorok szama: ", "Termeszetes szamot varok!");
vector<Kor> t(n);
for(int i=0; i<n;++i)
{
cout<<"Az"<<i+1<<"-dik kor koordinatai:\n";
x=ReadReal("\t x: ", "Valos szamot varok!");
y=ReadReal("\t y: ", "Valos szamot varok!");
Pont c;
c.Beallit(x,y);
r=ReadRealP("A kor sugara: ","Nem negativ valos szamot varok!");
c.Eltol(u,k,d,e);
c.Kiir(u, k);
}
return 0;
}
[B]kor.h[/B]
#ifndef KOR_H_INCLUDED
#define KOR_H_INCLUDED
#include "pont.h"
class Kor{
private:
Pont c;
double r;
public:
};
#endif // KOR_H_INCLUDED
[B]pont.h[/B]
#ifndef PONT_H_INCLUDED
#define PONT_H_INCLUDED
#include "vektor.h"
class Pont{
private:
double x,y;
public:
Pont() {x=y=0.0;}
void Beallit (double a, double b) {x=a; y=b;}
void Eltol(double u, double k, double &a, double &b);
void Kiir(double u, double k);
};
#endif // PONT_H_INCLUDED
[B]vektor.h[/B]
#ifndef VEKTOR_H_INCLUDED
#define VEKTOR_H_INCLUDED
class Vector2D{
private:
double d,e;
public:
Vector2D(): d(0.0), e(0.0) {}
Vector2D(double &a, double &b): d(a), e(b) {}
};
#endif // VEKTOR_H_INCLUDED
[B]pont.cpp[/B]
#include <iostream>
#include "pont.h"
#include "vektor.h"
using namespace std;
void Pont::Eltol(double u, double k, double &a, double &b)
{
u=x+a;
k=y+b;
}
void Pont::Kiir(double u, double k)
{
cout <<"u: "<<u<<endl;
cout <<"k: "<<k<<endl;
} -
Gyuri16
senior tag
válasz icespeak #849 üzenetére
az Eltol fuggvenynek az u es k valtozokat ertek szerint adod at, igy aztan nem kapod meg bennunk a vart eredmenyt. Probald meg inkabb azokat referenciaval atadni (a,b helyett)
amugy az eltolasnak nem a pont private x,y valtozoit kellene eltolnia? akkor a kiirnak se kellene parameter. nem ertem mire kell az u,k
Nem vagyok egoista, csak uborkagyalu!
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Volkswagen ID.7 menetpróba
- CURVE - "All your cards in one." Minden bankkártyád egyben.
- Motoros topic
- ZIDOO médialejátszók
- Villanyszerelés
- Aliexpress tapasztalatok
- Jövedelem
- Motorola Edge 50 Pro - több Moto-erő kéne bele
- Kerékpárosok, bringások ide!
- iRacing.com - a legélethűbb -online- autós szimulátor bajnokság
- További aktív témák...