Dinos_12345 Δημοσ. 23 Ιανουαρίου 2016 Δημοσ. 23 Ιανουαρίου 2016 Καλησπέρα. Ας υποθέσουμε ότι έχουμε ένα input.txt το οποίο περιέχει μια λίστα από ονόματα. Εγώ θέλω να πάρω τα ονόματα αυτά και να τα κάνω ότι θέλω. Όμως δεν ξέρω πόσα είναι εκ των προτέρων αλλά το αρχείο περιέχει στην πρώτη γραμμή το πλήθος. Πως θα το κάνω extract από εκεί; Δεν είναι καθαρό, πες 7. Μπορεί να έχει μπροστά και ένα string. Μπορεί να είναι noob question αλλά δεν μου έρχεται. Καμιά ιδέα;
conkal Δημοσ. 23 Ιανουαρίου 2016 Δημοσ. 23 Ιανουαρίου 2016 Το αρχειο θα το εχει στην πρωτη γραμμη και θα γραφει κατι σε φαση : Size is 67 Αυτο το φορματ θα ειναι ιδιο σε καθε αρχειο αλλιως δεν μπορεις να βγαλει ακρη. θα ξερεις οτι το τριτο πραγμα που θα διαβασεις θα ειναι το νουμερο σου Οποτε θα διαβασεις την πρωτη γραμμη , θα την κοψεις σε τοκενσ και μετα θα παρεις το trito token Διαβαζεις εδω : http://www.cplusplus.com/reference/cstring/strtok/ και βαζεις και το site στους σελιδοδεικτες σου 1
Dinos_12345 Δημοσ. 23 Ιανουαρίου 2016 Μέλος Δημοσ. 23 Ιανουαρίου 2016 Το αρχειο θα το εχει στην πρωτη γραμμη και θα γραφει κατι σε φαση : Size is 67 Αυτο το φορματ θα ειναι ιδιο σε καθε αρχειο αλλιως δεν μπορεις να βγαλει ακρη. θα ξερεις οτι το τριτο πραγμα που θα διαβασεις θα ειναι το νουμερο σου Οποτε θα διαβασεις την πρωτη γραμμη , θα την κοψεις σε τοκενσ και μετα θα παρεις το trito token Σκεφτόμουν κάτι σε προσπέλαση της πρώτης γραμμής και μόλις βρεί αριθμό να τον τραβήξει, αλλά αυτό θα πρέπει να γίνει χαρακτήρα χαρακτήρα και αν το μέγεθος είναι 65 τότε θα πάρει το 6 και το 5 θα μείνει.
Giorgos65ert Δημοσ. 23 Ιανουαρίου 2016 Δημοσ. 23 Ιανουαρίου 2016 Ο τρόπος που πρότεινε ο conkal είναι μια χαρά και απλός, δεν χρειάζεται να σκαλίζεις 1 per 1 το file. Τώρα αν το σκεφτικές έτσι άπλα πραξε έτσι: αν βρεις αριθμό τότε χωστών σε ένα string και μετά προχώρα αν δεν τελείωσε εκεί το read και μετά ακολουθεί άλλο ψηφίο μετά διάβασε κιαλλο μέχρι να διαβάσεις όλα τα ψηφία του αριθμού αλλιώς σταμάτα το εκεί. και μετά τα κάνεις ένα atoi/atof(εξαρτάτε τι είναι) η με sstring αν χρησιμοποιείς std::string.
Dinos_12345 Δημοσ. 23 Ιανουαρίου 2016 Μέλος Δημοσ. 23 Ιανουαρίου 2016 Ο τρόπος που πρότεινε ο conkal είναι μια χαρά και απλός, δεν χρειάζεται να σκαλίζεις 1 per 1 το file. Τώρα αν το σκεφτικές έτσι άπλα πραξε έτσι: αν βρεις αριθμό τότε χωστών σε ένα string και μετά προχώρα αν δεν τελείωσε εκεί το read και μετά ακολουθεί άλλο ψηφίο μετά διάβασε κιαλλο μέχρι να διαβάσεις όλα τα ψηφία του αριθμού αλλιώς σταμάτα το εκεί. και μετά τα κάνεις ένα atoi/atof(εξαρτάτε τι είναι) η με sstring αν χρησιμοποιείς std::string. Έστω ότι έθεσα το limit στα 10 ψηφία άρα έχουμε int size[10]; κάνω την προσπέλαση και έχω καταλήξει με 10 άτομα. Τα υπόλοιπα 8 ψηφία όταν κάνω atoi(size); τι θα γίνουν; Εννοώ, το array εκεί έχει σκουπίδια, η atoi θα τα συμπεριλάβει or not;
Giorgos65ert Δημοσ. 23 Ιανουαρίου 2016 Δημοσ. 23 Ιανουαρίου 2016 Έστω ότι έθεσα το limit στα 10 ψηφία άρα έχουμε int size[10]; κάνω την προσπέλαση και έχω καταλήξει με 10 άτομα. Τα υπόλοιπα 8 ψηφία όταν κάνω atoi(size); τι θα γίνουν; Εννοώ, το array εκεί έχει σκουπίδια, η atoi θα τα συμπεριλάβει or not; όχι μάλλον λάθος κατάλαβες. Τα ψηφία θα τα βάζεις σε ένα string(π.χ. std::string) και μετά θα κάνεις έναν integer ( π.χ. int number = atoi(your_string(αν εχεις std::string και θες με atoi άπλα κάνεις your_str.c_str ώστε να πάρεις σε const char *); ) Δες την χρήση της atoi για να καταλάβεις. http://www.cplusplus.com/reference/cstdlib/atoi/
Dinos_12345 Δημοσ. 23 Ιανουαρίου 2016 Μέλος Δημοσ. 23 Ιανουαρίου 2016 όχι μάλλον λάθος κατάλαβες. Τα ψηφία θα τα βάζεις σε ένα string(π.χ. std::string) και μετά θα κάνεις έναν integer ( π.χ. int number = atoi(your_string(αν εχεις std::string και θες με atoi άπλα κάνεις your_str.c_str ώστε να πάρεις σε const char *); ) Δες την χρήση της atoi για να καταλάβεις. http://www.cplusplus.com/reference/cstdlib/atoi/ Νομίζω το ίδιο λέμε. Εγώ λέω #include <stdio.h> #include <string.h> #include <stdlib.h> int main () { int size[10]; /*Κάνω κάποια διαδικασία και έχω εκχωρήσει στην πρώτη θέση το 1 με fputc(size,10,input.txt) και στη δεύτερη το 0. Άρα έχω σαν μέγεθος πίνακα το 10. Άρα έχουμε size[10]={1,0,σκουπίδια μέχρι και το τέλος του array}*/ int listsize = atoi(size); /*Εδώ θα μπει μόνο το 10 ή και τα σκουπίδια;*/ system("pause"); return 0; }
Giorgos65ert Δημοσ. 23 Ιανουαρίου 2016 Δημοσ. 23 Ιανουαρίου 2016 Νομίζω το ίδιο λέμε. Εγώ λέω #include <stdio.h> #include <string.h> #include <stdlib.h> int main () { int size[10]; /*Κάνω κάποια διαδικασία και έχω εκχωρήσει στην πρώτη θέση το 1 με fputc(size,10,input.txt) και στη δεύτερη το 0. Άρα έχω σαν μέγεθος πίνακα το 10. Άρα έχουμε size[10]={1,0,σκουπίδια μέχρι και το τέλος του array}*/ int listsize = atoi(size); /*Εδώ θα μπει μόνο το 10 ή και τα σκουπίδια;*/ system("pause"); return 0; } Στην προκείμενη περίπτωση θα σου εμφανίσει σφάλμα γιατί η atoi παίρνει const char * και όχι int []. Edit: Ας πούμε έτσι η atoi δεν επιστρέφει τα 'σκουπίδια' του πινάκα: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(void) { char * str = new char[10]; strcat(str,"12"); int x = atoi(str); printf("%i\n",x); delete [] str; return 0; }
Dinos_12345 Δημοσ. 23 Ιανουαρίου 2016 Μέλος Δημοσ. 23 Ιανουαρίου 2016 Στην προκείμενη περίπτωση θα σου εμφανίσει σφάλμα γιατί η atoi παίρνει const char * και όχι int []. Δεν την παλεύω, αφού θέλω να ορίσω string γιατί δίνω int; *Hits head on the desk* Με char size[10] λειτουργεί όπως το λέω.( ; ) Edit, αν ξέρουμε ότι έχουμε σταθερό string μπροστά από το μέγεθος σε φάση, megethos listas: 10 μπορούμε να κάνουμε και fscanf(fp,"%s %s %d",&N); ?
Giorgos65ert Δημοσ. 23 Ιανουαρίου 2016 Δημοσ. 23 Ιανουαρίου 2016 Δεν την παλεύω, αφού θέλω να ορίσω string γιατί δίνω int; *Hits head on the desk* Με char size[10] λειτουργεί όπως το λέω.( ; ) Edit, αν ξέρουμε ότι έχουμε σταθερό string μπροστά από το μέγεθος σε φάση, megethos listas: 10 μπορούμε να κάνουμε και fscanf(fp,"%s %s %d",&N); ? ναι μπορείς πολύ άπλα να κάνεις fscanf(fp,"%s %s %d",&str1,&str2,&N); και έχεις των αριθμό σου έτυμο χωρίς πολλά πολλά και ύστερα αν δεν χρειάζεσαι τα str1,str2 τα κάνεις free. 2
defacer Δημοσ. 24 Ιανουαρίου 2016 Δημοσ. 24 Ιανουαρίου 2016 char * str = new char[10]; Είναι τραγελαφικό να γράφει κανείς C++ μόνο για το new και όλα τα υπόλοιπα να είναι C. 4
Giorgos65ert Δημοσ. 24 Ιανουαρίου 2016 Δημοσ. 24 Ιανουαρίου 2016 Είναι τραγελαφικό να γράφει κανείς C++ μόνο για το new και όλα τα υπόλοιπα να είναι C. σωστά λάθος μου. άπλα έχω συνηθίσει να γράφω σε C++, τώρα δεν νομίζω να είναι παίδεμα να κάνει replace το new .. με malloc και το delete με free.
Dinos_12345 Δημοσ. 24 Ιανουαρίου 2016 Μέλος Δημοσ. 24 Ιανουαρίου 2016 Μιας και μας έφερε η κουβέντα στη C++ Θεωρώ την C πολύ ιδιότροπη. Εγώ ξεκίνησα προγραμματισμό με την JS, αντικειμενοστραφής, όμορφο και απλό συντακτικό. Σκάει η C πρώτο εξάμηνο, και αντί για var x=0; έχω, int,fload,char,double,long long και χίλια δύο άλλα πράγματα να προσέξω. Νομίζω πως εν τέλει το σύστημα "δηλώνω τα πάντα" γεννάει πιο πολλά προβλήματα απ'ότι λύνει. Επίσης άπειρως τραγελαφικό το cast σε float για να σου δώσει δεκαδικό αποτέλεσμα σε μια μεταβλητή που έχεις ήδη ορίσει ως float, όταν κάνεις διαίρεση. Είναι κουραστικό σε ένα πρόγραμμα χιλιάδων γραμμών να προσέχεις πιο πολύ την σύνταξη παρά τη λύση του προβλήματος. Θα μου πείτε, "ρε φίλε τι να κάνουμε εμείς τώρα; Να πάμε να αναστήσουμε τον Richie να αλλάξει το σύστημα;" αλλά με τρώει, τι να κάνω... Η C++ έχει τις ίδιες ιδιοτροπίες;
defacer Δημοσ. 24 Ιανουαρίου 2016 Δημοσ. 24 Ιανουαρίου 2016 1. Πολλά έχουν ειπωθεί για statically vs dynamically typed γλώσσες ("δηλώνω τα πάντα"), the truth is out there. Υπάρχουν και γλώσσες όπου μπορείς να τα κάνεις και τα δυο μαζί. Προφανώς αν υπήρχε εύκολη απάντηση θα την είχαμε βρει μέχρι τώρα. 2. Αν έχεις ήδη float δε χρειάζεται να κάνεις cast μετά. 3. Η C++ έχει πολύ περισσότερες ιδιοτροπίες. Σε εισαγωγικό επίπεδο έχεις πλέον έτοιμα τα βασικά abstractions (std::string, vector, array, references) οπότε τα απλά τα κάνεις χωρίς να μαλλιοτραβιέσαι με τετραπλούς pointers και malloc/free, αλλά πίσω έχει η αχλάδα την ουρά. 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα