Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

Γεια σας παιδιά!

Προσπαθώ να λύσω ένα πρόβλημα,

έχω ένα αρχείο, το διαβάζω χρησιμοποιώντας ένα string, και

ελέγχω εαν μέσα σε αυτό το string υπάρχει το text "<br>"! εάν το βρει

τότε να περάσει αυτό το string σε μια άλλη μεταβλητή και από αυτή να

αφαιρέσαι το "<br>" χωρίς να πειράξει το υπόλοιπο περιεχόμενο!

 

έχω αυτό εδώ τον κώδικα!   έχω ψάξει και σε ιστοσελίδες αλλά ακόμα

δεν έχω καταφέρει να κάνω κάτι.  Επίσης όλος ο κώδικας δουλεύει μέχρι

 

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

ifstream	levelRead;

string		readLevel;
string		askLevel;

int			lines  = 0;
int			lengthOf;
int			length = 0;

int main()
{
	cout << "Type the name of the level you want to open:\n> ";
	cin  >> askLevel;

	levelRead.open(("C:\\RPG\\level" + askLevel + ".lev")); 
	if (levelRead.is_open())
	{
		while(!levelRead.eof())
		{
			getline(levelRead, readLevel);

			if (readLevel.find("<br>"))
			{
				lines++;
				
				lengthOf = readLevel.length();   
				           length=readLevel.erase(lengthOf.first()lengthOf-3, lengthOf.last() lengthOf);
				
				
			}
		}
		levelRead.close();
	}
	else cout << "File didn't open!\n";
	levelRead.close();

	cin.get();
	cin.get();

	return 0;
}

Επεξ/σία από ICheats
Δημοσ.

 

τότε να περάσει αυτό το string σε μια άλλη μεταβλητή και από αυτή να

αφαιρέσαι το "<br>" χωρίς να πειράξει το υπόλοιπο περιεχόμενο

 

Δεν καταλαβαίνω από την περιγραφή ποιό είναι το αποτέλεσμα που θέλεις να έχεις.

Δημοσ.

Απ' ότι αποκρυπτογράφησα, θες να σαρώνεις κείμενο γραμμή γραμμή και θες να βγάλεις τα "\n" ( για σένα <br> ) για να έχεις ατόφιο το κέιμενο...;

 

Χωρίς να έχω ιδιαίτερη γνώση από C++, ίσως να έχει τίποτα έτοιμο, εγώ θα έκανα το εξής :

 

θα σκάναρα την μεταβλητή μου μέχρι να βρω <br> και στην συνέχεια θα έκανα ν-1 memcpy σε έναν buffer (μια άλλη μεταβλητή). μετά θα   άλλαζα το υπόλοιπο σε μία νέα μεταβλητή ή κ την ίδια και θα επαναλάμβανα για όσες πληροφορίες έψαχνα.

 

π.χ. κάτι στο πολύ γενικό...

 

 

 

string a,b[3],d,e;
int k;

a=αδαδαδα<br>δδδαδα<br>ρερερε<br>

for(i=0;i<INFO_TO_EXTRACT;i++){
k=sizeof(a);
c=0;
while(a[c]!=<br>){
 c++;
}

memcpy(b[i],a,sizeof(c-1));
memcpy(a,a+c,k-c);
}
 

ελπίζω να μην το τερμάτισα αρκετά. γενικά ψάξε για text parsing.

Δημοσ.

Ισως να μπορουσε να γινει με erase:

str.erase(str.find('<br>'),str.find('<br>')+4)

και αν δεν θες να πειραξεις το αρχικο string

strcpy(str2,str);

str2.erase(str2.find('<br>'),str2.find('<br>')+4);

Δημοσ. (επεξεργασμένο)

 

Δεν καταλαβαίνω από την περιγραφή ποιό είναι το αποτέλεσμα που θέλεις να έχεις.

 

Απλά θέλω να σβήνω από το string που παίρνω διαβάζοντας ένα αρχείο, κάποιο μέρος του. Και αυτό το μέρος του είναι το "<br>"!

 

όπως πολύ σωστά είπε και ο cyberrobot:

 

Απ' ότι αποκρυπτογράφησα, θες να σαρώνεις κείμενο γραμμή γραμμή και θες να βγάλεις τα "\n" ( για σένα <br> ) για να έχεις ατόφιο το κέιμενο...;

 

!!

 

Πάντως λίγο πολύ πιστεύω το κατάφερα. έχει κάποια προβλήματα, αλλά δουλεύει!

 

#include <iostream>
#include <sstream>
#include <fstream>

using namespace std;

ifstream    levelRead;

string        readLevel;
string        askLevel;
string        contents;
int            lines  = 0;
int            length = 0;

int main()
{
    cout << "Type the name of the level you want to open:\n> ";
    cin  >> askLevel;

    levelRead.open(("C:\\RPG\\level" + askLevel + ".lev")); //Opens a file with custom name! 
    if (levelRead.is_open())
    {
        while(!levelRead.eof())
        {
            getline(levelRead, readLevel);

            cout << readLevel << endl;

            if (readLevel.find(("<br>")))
            {
                lines++;                   //We know how many lines the array will be.

                length = readLevel.length();

                ostringstream convert;     // stream used for the conversion
                convert << length;

                //now we need to delete the <br> from the string
                readLevel.erase(readLevel.begin()+(length-4), readLevel.end()-length);

                contents = readLevel;

                cout << contents << "\t Edited to make '<br>' disappear!!" << endl;
            }

            readLevel = " ";               //For memory issues we make it nothing.
        }
    }
    else cout << "File didn't open!\n";

    levelRead.close();

    //cout << endl << contents << endl;

    cin.get();
    cin.get();

    return 0;
}

 

Το άλλο θέμα όμως είναι ότι στον φάκελο C:\RPG\ έχω δύο αρχεία. Το ένα ονομάζεται "level1.lev" και το άλλο "level2.lev"!!

 

Μόλις τρέχω το πρόγραμμα μου ζητάει κανονικά έναν αριθμό. Που σημαίνει ότι το πρόγραμμα άμα του δώσω εγώ το 1 πχ. θα πάει και θα κάνει τα εξής:

 

τα ανοίξει ένα ifstream με το συγκεκριμένο path: C:\RPG\level1.lev!!!! Το είχα τεστάρει να δω αν δουλεύει όλος ο κώδικας

και μέχρι σήμερα δούλευε μια χαρά! Χωρίς πρόβλημα! Χθες, γράφοντας 2 στην αρχή και πάλι δεν είχε κανένα πρόβλημα. 

 

Παρότι δεν άλλαξα κάτι στο visual c++ όμως όταν πατάω 2, μου βγάζει αυτό το error:

debug assertion failed

 

Expression: string iterator + offset out of range

 

Τι μπορεί να φταίει?? Ευχαριστώ πολύ για την υπομονή και τη βοήθεια!

 

ΥΣ: Ο τελικός στόχος είναι το επεξεργασμένο string, δηλαδή το contents να το βάζω σε ένα char array!

Ακόμη όμως δεν έχω βρει τρόπο για να το κάνω αυτό...

Επεξ/σία από ICheats
Δημοσ.

Η συνάρτηση levelRead.open() επιστρέφει τίποτα; για δες αν όντως ανοίγει το file πάρτο βήμα βήμα...αλλά άμα δούλευε μάλλον κάπου αλλού σκαλώνει. Το εκτελέσιμο/read_file σου είναι στο ίδιο/σωστό path...;

Δημοσ.

Python; Δεν είναι στις επιλογές; Δύο γραμμές κώδικα είναι η παραπάνω διαδικασία. 

 

όχι! :D

 

Η συνάρτηση levelRead.open() επιστρέφει τίποτα; για δες αν όντως ανοίγει το file πάρτο βήμα βήμα...αλλά άμα δούλευε μάλλον κάπου αλλού σκαλώνει. Το εκτελέσιμο/read_file σου είναι στο ίδιο/σωστό path...;

 

και τα δύο μια χαρά γίνονται, το αρχείο το ανοίγει κανονικά, επίσης και τα δύο αρχειάκια είναι στο ίδιο path!

 

Κάπου αλλού σκαλώνει! να καταλάβεις, ανοίγει το δεύτερο αρχείο, δείχνει κανονικά στην οθόνη το περιεχόμενό του

και μόλις πάει να κλείσει σκαλώνει και βγάζει το πρόβλημα!

 

Επίσης σε αυτό:       να κάνω μία διευκρύνηση, σκαλώνει κάπου μέσα στο if και όχι έξω, σχετικά λογικό αφού ανοίγει το file.

 

και τα δύο μια χαρά γίνονται, το αρχείο το ανοίγει κανονικά, επίσης και τα δύο αρχειάκια είναι στο ίδιο path!

 

Κάπου αλλού σκαλώνει! να καταλάβεις, ανοίγει το δεύτερο αρχείο, δείχνει κανονικά στην οθόνη το περιεχόμενό του

και μόλις πάει να κλείσει σκαλώνει και βγάζει το πρόβλημα!

Δημοσ. (επεξεργασμένο)

... 

Χωρίς να έχω ιδιαίτερη γνώση από C++, ίσως να έχει τίποτα έτοιμο, εγώ θα έκανα το εξής :

 

θα σκάναρα την μεταβλητή μου μέχρι να βρω <br> και στην συνέχεια θα έκανα ν-1 memcpy σε έναν buffer (μια άλλη μεταβλητή). μετά θα   άλλαζα το υπόλοιπο σε μία νέα μεταβλητή ή κ την ίδια και θα επαναλάμβανα για όσες πληροφορίες έψαχνα.

 

π.χ. κάτι στο πολύ γενικό...

 

 

string a,b[3],d,e;
int k;

a=αδαδαδα<br>δδδαδα<br>ρερερε<br>

for(i=0;i<INFO_TO_EXTRACT;i++){
k=sizeof(a);
c=0;
while(a[c]!=<br>){
 c++;
}

memcpy(b[i],a,sizeof(c-1));
memcpy(a,a+c,k-c);
}
 

 

ελπίζω να μην το τερμάτισα αρκετά. γενικά ψάξε για text parsing.

 

 

 

Παραθέτω και κάτι πιο εξειδικευμένο απλά για να υπάρχει, αλλά μονάχα αν η εκφώνηση απαιτεί την χρήση c-strings (αλλιώς η std::string.erase() που υπέδειξε ο Χάρι Πότερ και χρησιμοποίησε κι ο topic-starter είναι μακράν πιο εύστοχη λύση)

 

Το βάζω σε C, γιατί σε C++ σίγουρα θα το κάνω λάθος :P

 

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* ---------------------------------------------- */
int s_del_word( char *s, const char *word )
{
	char *cp = s;				/* set a pointer at start of s */
	char *cpEnd = NULL;
	size_t lenWord = 0;
	int ret = 0;				/* return value of function */

	/* sanity checks */
	if ( !s || !*s || !word || !*word )
		return 0;

	cpEnd = s + strlen(s);			/* set a pointer at end of s */
	lenWord = strlen(word);
	while ( NULL != (cp=strstr(cp,word)) )	/* cp points to next occurrence of word (or NULL) */
	{
		ret++;
		if ( cp + lenWord > cpEnd )	/* true only if word found at end of s */
			break;
		/* delete current occurrence of word (+1 because we need copying '\0' too) */
		memmove( cp, cp+lenWord, (size_t)(cpEnd - (cp+lenWord) + 1) );
		cpEnd -= lenWord;		/* optional (new end of s after deleting word) */
	}

	return ret;
}

/* ---------------------------------------------- */
int main( void )
{
    char t[] = "abcd<br>efghi<br><br>jkl<br>mnopqrst<br>.";
    char *word = "<br>";
    int lines = 0;

    if ( strstr(t, word) )
    {
        char s[sizeof(t)] = {'\0'};
        memcpy(s, t, sizeof(t) );
        lines = s_del_word(s, word);
        printf( "%s\n%s was deleted %d times\n%s\n", t, word, lines, s );
    }

    system( "pause" );    /* Windows only */
    return 0;
}
 
Έξοδος:
abcd<br>efghi<br><br>jkl<br>mnopqrst<br>.
<br> was deleted 5 times
abcdefghijklmnopqrst.
Press any key to continue . . .

 

Παρεμπιπτόντως, ο περιορισμός που θέτεις ώστε να γίνεται πρώτα έλεγχος για την ύπαρξη του "<br>" και αν βρεθεί τότε μονάχα να κοπιάρεται το string σε νέα μεταβλητή, περιπλέκει αχρείαστα τον κώδικα της main(), ο οποίος θα μπορούσε να αρκεστεί στον έλεγχο που ενσωματώνει έτσι κι αλλιώς η s_del_word(), αλλά αν είναι έτσι η εκφώνηση το ... καταπίνουμε :lol: Μια εναλλακτική υλοποίηση της s_del_word() θα μπορούσε να επιστρέφει το s και να έχει το πλήθος των διαγραφών ως by-reference όρισμα για να το ενημερώνει, ή θα μπορούσε ακόμα να επιστρέφει ένα newly allocated string, το οποίο όμως θα έπρεπε να γίνει free() κατόπιν στην main().

 

Σε ότι αφορά το άλλο πρόβλημα που παραθέτεις μετέπειτα, το αφήνω σε άλλα παιδιά που έχουν την C++ πολύ πιο φρέσκια από ότι εγώ.

 

ΥΓ. Γιατί έχεις 2 νήματα με το ίδιο ακριβώς θέμα;

 

EDIT:

Έβαλα comments.

Επεξ/σία από migf1
Δημοσ.

όχι! :D

 

 

και τα δύο μια χαρά γίνονται, το αρχείο το ανοίγει κανονικά, επίσης και τα δύο αρχειάκια είναι στο ίδιο path!

 

Κάπου αλλού σκαλώνει! να καταλάβεις, ανοίγει το δεύτερο αρχείο, δείχνει κανονικά στην οθόνη το περιεχόμενό του

και μόλις πάει να κλείσει σκαλώνει και βγάζει το πρόβλημα!

 

Επίσης σε αυτό:       να κάνω μία διευκρύνηση, σκαλώνει κάπου μέσα στο if και όχι έξω, σχετικά λογικό αφού ανοίγει το file.

 

Σε μένα πάντως ο κώδικάς σου με g++ 4.7.0 δεν δουλεύει (εκτός αν δεν έχω καταλάβει καλά τι προσπαθείς να κάνεις). Όπως και να 'χει, παρόλο που είμαι σίγουρος πως άλλα παιδιά μπορούν να σου δώσουν πολύ πιο κομψή C++ υλοποίηση από τη δικιά μου, δοκίμασε με τον παρακάτω κώδικα...

 

 

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

/* ------------------------------------------ */
int main()
{
    ifstream file;                // level file to read
    string fname;                // name of the level file
    string level;                // level number
    string word = "<br>";
    int nlines = 0;

    // prompt for level number
    cout << "level to open: ";
    cin >> level;

    // construct fname and read file, based on user input
    fname = "level" + level + ".lev";
    file.open( fname.c_str() );        // pass fname as c-string to file.open() - back compatibility
    if ( !file.is_open() ) {
        cout << "*** error reading file: \"" << fname << "\", aborting to shell..." << endl;
        system( "pause" );        // Windows only
        return 0;
    }

    // parse the file
    while ( !file.eof() )
    {
        string fline;            // for storing a physical file line

        getline(file, fline);
        if ( string::npos == fline.find(word) )
            break;

        string line = fline;        // copy fline to a new string

        // erase all occurrences of word from line
        size_t pos = 0;
        while ( string::npos != (pos = line.find(word,pos)) )
        {
            nlines++;
            line.erase(
                line.begin() + pos,
                line.begin() + pos + word.length()
                );
            cout << "line: " << line << endl;
        }

    }
    file.close();

    cout << endl << word << " was erased " << nlines << " times" << endl;

    system( "pause" );        // Windows only

    return 0;
}
 
Sample file: level1.lev
abcd<br>efghi<br><br>jkl<br>mnopqrst<br>.
Έξοδος
level to open: 2
*** error reading file: "level2.lev", aborting to shell...
Press any key to continue . . .
level to open: 1
line: abcdefghi<br><br>jkl<br>mnopqrst<br>.
line: abcdefghi<br>jkl<br>mnopqrst<br>.
line: abcdefghijkl<br>mnopqrst<br>.
line: abcdefghijklmnopqrst<br>.
line: abcdefghijklmnopqrst.

<br> was erased 5 times
Press any key to continue . . .

 

 

Δεν το γνώριζα, αλλά η ifstream.open() στο C++11 δουλεύει και με string για fname αντί για char array που ήξερα εγώ (στον κώδικα το μετατρέπω από string σε char array, για να δουλεύει και με τα παλαιότερα standards).

Δημοσ. (επεξεργασμένο)

Ευχαριστώ πολύ!! Θα επεξεργαστώ τη λύση που μου έδωσες! :)

 

 

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

/* ------------------------------------------ */
int main()
{
    ifstream file;                // level file to read
    string fname;                // name of the level file
    string level;                // level number
    string word = "<br>";
    int nlines = 0;

    // prompt for level number
    cout << "level to open: ";
    cin >> level;

    // construct fname and read file, based on user input
    fname = "level" + level + ".lev";
    file.open( fname.c_str() );        // pass fname as c-string to file.open() - back compatibility
    if ( !file.is_open() ) {
        cout << "*** error reading file: \"" << fname << "\", aborting to shell..." << endl;
        system( "pause" );        // Windows only
        return 0;
    }

    // parse the file
    while ( !file.eof() )
    {
        string fline;            // for storing a physical file line

        getline(file, fline);
        if ( string::npos == fline.find(word) )
            break;

        string line = fline;        // copy fline to a new string

        // erase all occurrences of word from line
        size_t pos = 0;
        while ( string::npos != (pos = line.find(word,pos)) )
        {
            nlines++;
            line.erase(
                line.begin() + pos,
                line.begin() + pos + word.length()
                );
            cout << "line: " << line << endl;
        }

    }
    file.close();

    cout << endl << word << " was erased " << nlines << " times" << endl;

    system( "pause" );        // Windows only

    return 0;
}
 
 

 

EDIT: Ο κώδικας δουλεύει μια χαρά και με τα δύο αρχεία! Ευχαριστώ πάρα πολύ! :) :)  Επίσης, ξέχασες να κάνεις include <string>!!

Επίσης, δεν είναι μεγάλη λεπτομέρεια, αλλά για καλύτερη δομή και κλείσιμο προτείνω αυτό:

 

#include <iostream>
#include <fstream>
#include <string>

using namespace std;

/* ------------------------------------------ */
int main()
{
    ifstream file;                // level file to read
    string fname;                 // name of the level file

    const string word = "<br>";

    string level;                 // level number
    int lines = 0;                  // lines of the array!

    // prompt for level number
    cout << "Level to open: ";
    cin >> level;

    // construct fname and read file, based on user input
    fname = "C:\\RPG\\level" + level + ".lev";

    file.open( fname );        // pass fname as c-string to file.open() - back compatibility
    if ( !file.is_open() )
        cout << "*** error reading file: \"" << fname << "\"."<< endl;
    else
    {
        // parse the file
        while ( !file.eof() )
        {
            string fline;            // for storing a physical file line

            getline(file, fline);
            if ( string::npos == fline.find(word) )
                break;

            string line = fline;        // copy fline to a new string

            // erase all occurrences of word from line
            size_t pos = 0;
            while ( string::npos != (pos = line.find(word,pos)) )
            {
                lines++;
                line.erase
                (
                    line.begin() + pos,
                    line.begin() + pos + word.length()
                );
                cout << line << "\t Edited to make <br> disappear!" << endl;
            }

        }
        file.close();
    }

    cout << endl << "Press enter to finish: ";

    cin.get();
    cin.get();

    return 0;
}

 

 

ΥΣ: Τον κώδικα τον προσάρμωσα λίγο στο path για να παίζει σε εμένα έτσι όπως το χρειάζομαι! :) 
 

Επεξ/σία από ICheats
Δημοσ.

Παρακαλώ :)

 

Όπως σου έγραψα όμως και στο προηγούμενο ποστ μου, η γραμμή 25 του κώδικά σου δεν λειτουργεί σε παλαιότερες αναθεωρήσεις της C++, γιατί η εκεί η ifstream.open() αναμένει c-string και όχι string για fname (συν ότι όπως την έχεις τώρα, το σχόλιό μου δίπλα της που το έχεις αφήσει είναι άσχετο έτσι όπως το έχεις)

Δημοσ.

Καλημέρα,

 

ξαναδιαβάζοντας σήμερα τον κώδικά σου είδα επίσης πως η αλλαγή που έκανες σε αντιμετώπιση της περίπτωσης ανοίγματος του αρχείου, επιχειρεί να κλείσει το αρχείο ακόμα κι αν έχει αποτύχει το άνοιγμά του. Δηλαδή η γραμμή 55 πρέπει να μεταφρεθεί στην 53 (να βρίσκεται δηλαδή μέσα στο else). EDIT: άκυρο, μια χαρά μέσα στο else το έχεις, sorry my bad! (αφήνω το υπόλοιπο απλά για να υπάρχει ως πληροφορία).

 

Δεν θυμάμαι όμως αν στην πράξη έχει πρόβλημα με αυτό η C++ ή όχι, και δεν μπορώ να το δοκιμάσω αυτή τη στιγμή (σε C για παράδειγμα, κάποιοι compilers δίνουν seg-fault όταν επιχειρούμε: fclose(NULL) παρόλο που αν το θυμάμαι καλά το πρότυπο από C99 και μετά ορίζει πως θα έπρεπε να κάνουν sanity-check για αυτή την περίπτωση στην υλοποίηση της fclose() ).

Δημοσ.

Παρακαλώ :)

 

Όπως σου έγραψα όμως και στο προηγούμενο ποστ μου, η γραμμή 25 του κώδικά σου δεν λειτουργεί σε παλαιότερες αναθεωρήσεις της C++, γιατί η εκεί η ifstream.open() αναμένει c-string και όχι string για fname (συν ότι όπως την έχεις τώρα, το σχόλιό μου δίπλα της που το έχεις αφήσει είναι άσχετο έτσι όπως το έχεις)

 

:) Ναι, το παρατήρησα και ευχαριστώ, τον έτρεξα τον κώδικα αυτόν με τον gcc και δεν το υποστηρίζει. Τουλάχιστον αυτός που έχω! Η visual c++ πάντως είναι τέλεια! :)

 

Ναι καλά λες! δεν το παρατήρησα! το αλλάζω τώρα το comment!

 

Καλημέρα,

 

ξαναδιαβάζοντας σήμερα τον κώδικά σου είδα επίσης πως η αλλαγή που έκανες σε αντιμετώπιση της περίπτωσης ανοίγματος του αρχείου, επιχειρεί να κλείσει το αρχείο ακόμα κι αν έχει αποτύχει το άνοιγμά του. Δηλαδή η γραμμή 55 πρέπει να μεταφρεθεί στην 53 (να βρίσκεται δηλαδή μέσα στο else). EDIT: άκυρο, μια χαρά μέσα στο else το έχεις, sorry my bad! (αφήνω το υπόλοιπο απλά για να υπάρχει ως πληροφορία).

 

Δεν θυμάμαι όμως αν στην πράξη έχει πρόβλημα με αυτό η C++ ή όχι, και δεν μπορώ να το δοκιμάσω αυτή τη στιγμή (σε C για παράδειγμα, κάποιοι compilers δίνουν seg-fault όταν επιχειρούμε: fclose(NULL) παρόλο που αν το θυμάμαι καλά το πρότυπο από C99 και μετά ορίζει πως θα έπρεπε να κάνουν sanity-check για αυτή την περίπτωση στην υλοποίηση της fclose() ).

 

οκ! Δεν γνωρίζω για τους compilers της C, πάντως κοιτάζοντας τον κώδικα, είδα μόλις τώρα ότι το file.close() θα έπρεπε να μπει έξω από το else, γιατί νομίζω ότι θα το κλείσει μόνο όταν κάνει ό,τι περιέχει το else, αλλιώς δεν το κλείνει! τι πιστεύεις?

Δημοσ.

Μέσα στο else πρέπει να μείνει το file.close(), γιατί μόνο μέσα στο else έχει ανοίξει το file επιτυχημένα (στο if μπαίνει όταν αποτύχει η file.open(), δηλαδή όταν δεν έχει ανοιχτεί το file).

 

Σχετικά με το σχόλιο, είναι καλύτερα να το αφήσεις και να χρησιμοποιήσεις το fname όπως το είχα στον κώδικά μου, δηλαδή fname.c_std() (που σημαίνει πως το περνάει μέσα στην file.open() ως c-string και όχι ως string) για να δουλεύει το πρόγραμμά σου σε όλες τις εκδόσεις της C++.

 

Για τον g++, άμα του βάλεις -std=c++11 θα στο κάνει κανονικά compile και όπως τον έχεις εσύ τον κώδικα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...