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

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

Δημοσ.

Καλησπέρα.

Ας υποθέσουμε ότι έχουμε ένα input.txt το οποίο περιέχει μια λίστα από ονόματα. Εγώ θέλω να πάρω τα ονόματα αυτά και να τα κάνω ότι θέλω. Όμως δεν ξέρω πόσα είναι εκ των προτέρων αλλά το αρχείο περιέχει στην πρώτη γραμμή το πλήθος. Πως θα το κάνω extract από εκεί; Δεν είναι καθαρό, πες 7. Μπορεί να έχει μπροστά και ένα string. 

Μπορεί να είναι noob question αλλά δεν μου έρχεται.

Καμιά ιδέα;

  • Απαντ. 30
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Δημοσ.

Το αρχειο θα το εχει στην πρωτη γραμμη και θα γραφει κατι σε φαση : 

 

Size is 67

 

Αυτο το φορματ θα ειναι ιδιο σε καθε αρχειο αλλιως δεν μπορεις να βγαλει ακρη. θα ξερεις οτι το τριτο πραγμα που θα διαβασεις θα ειναι το νουμερο σου

 

Οποτε θα διαβασεις την πρωτη γραμμη , θα την κοψεις σε τοκενσ και μετα θα παρεις το trito token


Διαβαζεις εδω : http://www.cplusplus.com/reference/cstring/strtok/

 

και βαζεις και το site στους σελιδοδεικτες σου:-)

  • Like 1
Δημοσ.

Το αρχειο θα το εχει στην πρωτη γραμμη και θα γραφει κατι σε φαση : 

 

Size is 67

 

Αυτο το φορματ θα ειναι ιδιο σε καθε αρχειο αλλιως δεν μπορεις να βγαλει ακρη. θα ξερεις οτι το τριτο πραγμα που θα διαβασεις θα ειναι το νουμερο σου

 

Οποτε θα διαβασεις την πρωτη γραμμη , θα την κοψεις σε τοκενσ και μετα θα παρεις το trito token

Σκεφτόμουν κάτι σε προσπέλαση της πρώτης γραμμής και μόλις βρεί αριθμό να τον τραβήξει, αλλά αυτό θα πρέπει να γίνει χαρακτήρα χαρακτήρα και αν το μέγεθος είναι 65 τότε θα πάρει το 6 και το 5 θα μείνει. 

Δημοσ.

Ο τρόπος που πρότεινε ο conkal είναι μια χαρά και απλός, δεν χρειάζεται να σκαλίζεις 1 per 1 το file.

Τώρα αν το σκεφτικές έτσι άπλα πραξε έτσι:

αν βρεις αριθμό τότε χωστών σε ένα string και μετά προχώρα αν δεν τελείωσε εκεί το read και μετά ακολουθεί άλλο ψηφίο μετά διάβασε κιαλλο μέχρι να διαβάσεις όλα τα ψηφία του αριθμού αλλιώς σταμάτα το εκεί. και μετά τα κάνεις ένα atoi/atof(εξαρτάτε τι είναι) η με sstring αν χρησιμοποιείς std::string.

Δημοσ.

Ο τρόπος που πρότεινε ο 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;

Δημοσ.

Έστω ότι έθεσα το 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/

Δημοσ.

όχι μάλλον λάθος κατάλαβες. Τα ψηφία θα τα βάζεις σε ένα 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;
}
Δημοσ.

 

Νομίζω το ίδιο λέμε.

Εγώ λέω

#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;
}
Δημοσ.

Στην προκείμενη περίπτωση θα σου εμφανίσει σφάλμα γιατί η 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); ?

Δημοσ.

Δεν την παλεύω, αφού θέλω να ορίσω 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.

  • Like 2
Δημοσ.

Είναι τραγελαφικό να γράφει κανείς C++ μόνο για το new και όλα τα υπόλοιπα να είναι C.

 

σωστά λάθος μου. άπλα έχω συνηθίσει να γράφω σε C++, τώρα δεν νομίζω να είναι παίδεμα να κάνει replace το new .. με malloc και το delete με free.

Δημοσ.

Μιας και μας έφερε η κουβέντα στη C++

Θεωρώ την C πολύ ιδιότροπη.

Εγώ ξεκίνησα προγραμματισμό με την JS, αντικειμενοστραφής, όμορφο και απλό συντακτικό. Σκάει η C πρώτο εξάμηνο, και αντί για var x=0; έχω, int,fload,char,double,long long και χίλια δύο άλλα πράγματα να προσέξω. Νομίζω πως εν τέλει το σύστημα "δηλώνω τα πάντα" γεννάει πιο πολλά προβλήματα απ'ότι λύνει. Επίσης άπειρως τραγελαφικό το cast σε float για να σου δώσει δεκαδικό αποτέλεσμα σε μια μεταβλητή που έχεις ήδη ορίσει ως float, όταν κάνεις διαίρεση. Είναι κουραστικό σε ένα πρόγραμμα χιλιάδων γραμμών να προσέχεις πιο πολύ την σύνταξη παρά τη λύση του προβλήματος. 

Θα μου πείτε, "ρε φίλε τι να κάνουμε εμείς τώρα; Να πάμε να αναστήσουμε τον Richie να αλλάξει το σύστημα;"

αλλά με τρώει, τι να κάνω...

Η C++ έχει τις ίδιες ιδιοτροπίες;

Δημοσ.

1. Πολλά έχουν ειπωθεί για statically vs dynamically typed γλώσσες ("δηλώνω τα πάντα"), the truth is out there. Υπάρχουν και γλώσσες όπου μπορείς να τα κάνεις και τα δυο μαζί. Προφανώς αν υπήρχε εύκολη απάντηση θα την είχαμε βρει μέχρι τώρα.

 

2. Αν έχεις ήδη float δε χρειάζεται να κάνεις cast μετά.

 

3. Η C++ έχει πολύ περισσότερες ιδιοτροπίες. Σε εισαγωγικό επίπεδο έχεις πλέον έτοιμα τα βασικά abstractions (std::string, vector, array, references) οπότε τα απλά τα κάνεις χωρίς να μαλλιοτραβιέσαι με τετραπλούς pointers και malloc/free, αλλά πίσω έχει η αχλάδα την ουρά.

  • Like 1

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα

  • Δημιουργία νέου...