praegune kellaaeg 28.05.2024 22:56:39
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
sõnum |
|
jnt
HV Guru
liitunud: 10.05.2005
|
26.01.2008 12:50:35
PHP -> C++ (Ehk aitab keegi alguse kätte saada) |
|
|
Nimelt huvitab mind pikemat aega juba väga C/C++ keel, kuid ise üritades pole (siiani veel) endale selgeks tegemisega hakkama saand. Üks peamistest põhjustest on arvatavasti see, et ma kas ei oska kuidagi kasutada c/c++ manuali või polegi sellist olemas, nagu php puhul php.net veebileht. (kas msdn'is üldse midagi sellist on, et viskad funktsiooni otsingusse ja annab siis funktsiooni süntaksi, paar näidet ja kommentaarid, kus võib veelgi näiteid olla?) Ühesõnaga, pole ma leidnud korralikku manuali, mida oleks sama mugav kasutada, kui php oma. Ehk keegi teab paremat miskit?
Samas, üht-teist tasakesi ikka üritan ja natuke asi selgineb kogu aeg. Samas, keegi hea inimene võiks all oleva php koodi teha ümber c/c++ koodiks. Siis saaksin paar käsku veel kätte jne ja see aitaks mind arvatavasti päris palju. Siin on mu php kood siis:
<?php
$file='fail.txt';
$f=file($file);
for($a=0;$a<count($f);$a++){
$data[$a]=explode('|', $f[$a]);
}
?> |
_________________ Seisab keldris vana 386-486-Pentium1? Räägime! Ehk saan vanakesele uue elu anda.
Vaata siia, äkki müün midagi põnevat -> https://www.osta.ee/index.php?fuseaction=listing.seller&q[seller]=jnt |
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
|
:: |
2 :: |
0 :: |
99 |
|
tagasi üles |
|
|
Ohohh
Kreisi kasutaja
liitunud: 13.09.2003
|
26.01.2008 15:57:32
|
|
|
http://www.cplusplus.com/
C++ STL'is ei ole explode taolist funktsiooni. Kopisin selle mingist foorumist.
Koodi ennast on tunduvalt rohkem, kuna PHP teeb kogu muutujate initsialiseerimise ja massiivi suuruse muutmise sinu eest ära.
c++:
|
#include <fstream> #include <iostream> #include <vector> #include <string> // Kui seda rida ei pane, siis pead paljudele funktsioonidele ette kirjutama std:: using namespace std; // Leidsin selle funktsiooni netist. stringi klassi jaoks ei ole C++'il explode stiilis funktsiooni. // on strtok, aga see on tavaliste char'i massiivide jaoks void Tokenize(const string& str, vector<string>& tokens, const string& delimiters = " ") { // Skip delimiters at beginning. string::size_type lastPos = str.find_first_not_of(delimiters, 0); // Find first "non-delimiter". string::size_type pos = str.find_first_of(delimiters, lastPos); while (string::npos != pos || string::npos != lastPos) { // Found a token, add it to the vector. tokens.push_back(str.substr(lastPos, pos - lastPos)); // Skip delimiters. Note the "not_of" lastPos = str.find_first_not_of(delimiters, pos); // Find next "non-delimiter" pos = str.find_first_of(delimiters, lastPos); } } int main() { // muutujad for tsüklite jaoks unsigned int i, j; // faili nimi. Võiks olla ka char fileName[] = "fail.txt", aga et hoida ühtset joont, // siis kasutan ka siin string'i string fileName = "fail.txt"; // muutuja milles hoian failist loetud rida string line; // Vector stringi vectorist. // Välimine vector on ridade jaoks ja sisemine eraldatud sõnade jaoks. // (vector on põhimõtteliselt massiiv, mille suurus võib töökäigus muutuda) vector< vector<string> > data; // input file stream ifstream fs; // Avame faili. ifstream::open tahab parameetriks tavalist chari massiivi (C stringi) fs.open(fileName.c_str()); // Kontrollime kas fail avanes if (fs.is_open()) { // Loeme rea kaupa filist andmed while (getline(fs, line)) { vector<string> emty; // Lükkame data lõppu uue tühja rea data.push_back(emty); // Täidame selle rea lammutatud stringiga Tokenize(line, data.back(), "|"); } // Viisakas inimene paneb enda järel ukse kinni fs.close(); // Trükime andmed ekraanile for (i=0; i<data.size(); i++) { for (j=0; j<data[i].size(); j++) { cout << data[i][j] << " "; } cout << endl; } } else { cout << "Faili avamine ebaõnnestus" << endl; } return 0; }
|
|
|
Kommentaarid: 6 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
6 |
|
tagasi üles |
|
|
Supiplex
HV veteran
liitunud: 11.12.2002
|
26.01.2008 18:29:15
|
|
|
Nääd, Ohohh tegi oluliselt kiiremini valmis
Ma siis postitan enda versiooni kuna ma selle kord viitsisin valmis teha. Kood on sisult Ohohhi omaga sarnane, v.a. pisiasjad. Mul on tilluke command-line programm, millele saad faili andmetega ette anda:
chopfile.exe somedata.txt
c++:
|
/ Standard libraries #include <cstdlib> // Console I/O (cin, cout, cerr) #include <iostream> // File I/O #include <fstream> // STL string manipulation #include <string> // STL vector container #include <vector> using namespace std; /** * There is no native explode function in C++ or STL. * This code is modified from Alan Johnson's post to * usenet thread "explode equivalent in c++" in group comp.lang.c++ */ vector<string> explode(string delim, string in) { typedef string::size_type size_type; const size_type delim_len = delim.length(); vector<std::string> result; size_type i = 0, j; while (true) { j = in.find(delim, i); result.push_back(in.substr(i, j-i)); if (j == string::npos) break; i = j + delim_len; } return result; } /** * The main() function receives the arguments given in * command line. argCount specifies the number of arguments * and args is a C-style array containing argument strings. * * When executing the program as: * $ chopfile.exe data.txt * then arguments are passed on as if this code was executed: * argCount = 2; * args[0] = "chopfile.exe"; * args[1] = "data.txt" */ int main(int argCount, char *args[]) { // This is our input file ifstream inFile; // This is a buffer for holding current line string line; // Declare a 2-dimensional array of strings vector<vector<string> > data; // Start work. // User must give a file name if (argCount == 2) { // Open file with given file name inFile.open(args[1]); // Check if fail open succeeded if (inFile.is_open()) { // Read the file until it End-Of-File found while (!inFile.eof()) { // Read a line into buffer getline(inFile, line); // Explode the line and add it into data array data.push_back(explode("|", line)); } // Now we are done. Close file. inFile.close(); // Output the chopped data for (int i = 0; i < data.size(); i++) { for (int j = 0; j < data[i].size(); j++) { if (j) { cout << ", "; } cout << "(" << data[i][j] << ")"; } cout << endl; } // That's it folks. return EXIT_SUCCESS; } else { cerr << "Failed to open file: " << args[1] << endl; return EXIT_FAILURE; } } else { cerr << "Missing argument: file name" << endl; return EXIT_FAILURE; } }
|
Aga C++ käsiraamatutega on nii, et
- Piibliks on Bjarne Stroustrup'i raamat "The C++ Programming Language". See on A ja O, aga algajale ehk veidi tummine.
- Väga hea raamat algajale on Bruce Eckel'i "Thinking in C++", esimene osa seletab C++ keelt ja objektorienteeritust, teine osa seletab STL-i. Seda saab tasuta alla tõmmata. Otsi googlest.
- Muidu reference'iks kõlbab suvaline veebisait, näiteks http://www.cplusplus.com/ või http://www.sgi.com/tech/stl/
_________________ The young lady had an unusual list,
Linked in part to a structural weakness.
She set no preconditions.
viimati muutis Supiplex 26.01.2008 18:42:18, muudetud 1 kord |
|
Kommentaarid: 38 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
1 :: |
34 |
|
tagasi üles |
|
|
jnt
HV Guru
liitunud: 10.05.2005
|
|
Kommentaarid: 106 loe/lisa |
Kasutajad arvavad: |
|
:: |
2 :: |
0 :: |
99 |
|
tagasi üles |
|
|
bond666
HV vaatleja
liitunud: 11.09.2003
|
28.01.2008 13:35:06
|
|
|
search.msdn.microsoft.com on olemas küll aga otsimine on sealt raskendatud kuna seal on c#,.net,visual basic, javascript kõik läbisegi.
standard c asju saab edukalt leida google abil kasutades teda manualina - toksid google search "man:fopen".
|
|
Kommentaarid: 2 loe/lisa |
Kasutajad arvavad: |
|
:: |
0 :: |
0 :: |
2 |
|
tagasi üles |
|
|
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|