[Powered by Google Translate] Πρόβλημα Τμήμα Set 2: Έκδοση Hacker
Rob Bowden, Πανεπιστήμιο του Χάρβαρντ
Αυτό είναι CS50. CS50.TV
Έτσι, είμαι Rob. Είμαι ένας ανώτερος σε Kirkland. Αυτή είναι η τρίτη χρονιά μου TFing CS50.
Είναι η πρώτη φορά που αλλάζουμε από την ενότητα παραδοσιακό στιλ διάλεξη,
όπου έχουμε ακριβώς το είδος της κριτικής ό, τι συνέβη στην ομιλία και στη συνέχεια εσείς ερωτήσεις,
τώρα να είναι πολύ περισσότερο πρόβλημα που βασίζεται, όπου χρησιμοποιούμε χώρους, και -
Ω, έτσι η ιδέα είναι να πάει σε αυτό το link που σου έστειλα και στη συνέχεια θα είστε σε διάστημα μου.
Δεν έχει κανείς ένα φορητό υπολογιστή; Εντάξει.
Έτσι θα πάμε να χρησιμοποιεί αυτό, και θα πάμε να κάνουμε τα προβλήματα ζουν στην ενότητα
και να συζητήσει και να υπολογίζει τι είναι λάθος
και θα μπορούσα να σηκώσει κάποια από κωδικό σας, και εγώ θα συζητήσουμε τις ιδέες σας.
Έτσι έχει κάποιος είχε δυσκολία;
Μπορείτε να κάνετε chat στο πλάι? Δεν ξέρω αν θα έχουμε λόγος γι 'αυτό.
Τώρα, όπως και η προηγούμενη supersection, αν ήταν εκείνη την τάξη, εσείς ξέρετε τι αυτό είναι περίπου.
Σε όλα τα σύνολα P υπάρχει μετάβαση να είναι αυτά τα τμήματα.
Έτσι P-set 2, προδιαγραφές, υποθέτω ότι το είδα στο P-1 ήδη σετ.
Αλλά μπορούμε να δούμε στο σύνολο P-2 για το τι θα πάμε να πηγαίνει πέρα ​​σήμερα.
Και θα δείτε ένα τμήμα των ερωτήσεων.
Έτσι, αυτό θα είναι σε όλες τις Ρ-σύνολα? Θα υπάρχει ένα τμήμα των ερωτήσεων.
Μέχρι στιγμής έχουμε πει, "Σκεφτείτε αυτό μια ευκαιρία για την πρακτική."
Δεν θα σας ζητηθεί να υποβάλετε αυτό το πρόγραμμα.
Η ιδέα είναι ότι αυτοί υποτίθεται ότι πρέπει να το είδος του να σας βοηθήσει να ξεκινήσετε με το σύνολο του προβλήματος.
Υποθέτω ότι για την έκδοση Hacker, πολλοί από αυτούς που υποτίθεται ότι είναι ακριβώς νέα, ενδιαφέροντα πράγματα να μάθουν.
Δεν μπορεί να εφαρμόζεται άμεσα στο σύνολο του προβλήματος.
Και τώρα είμαστε δεν έχουν να τα υποβάλουν, αλλά στη θεωρία,
σύνολα για αργότερα το πρόβλημα, μπορείτε να τα υποβάλουν, και έτσι θα μπορεί να γίνει είτε στο τμήμα
ή να παρακολουθήσετε το τμήμα για να πάρει τις απαντήσεις, ή μπορείτε να τους πάρετε μόνο για τη δική σας
αν δεν αισθάνεστε σαν να απολαύσετε την παρουσία μου.
Έτσι, το - Νομίζω ότι αυτό είναι το πρώτο.
Αχ. Επίσης, κάτω από αυτές τις ενότητες των ερωτήσεων που επίσης έχετε ερωτήσεις σχετικά με τα σορτς.
Έτσι υποθέτω, στη θεωρία, είστε υποτίθεται για να παρακολουθήσουν αυτά πριν έρθει στην ενότητα,
αλλά είναι μια χαρά, αν δεν το κάνετε? θα πάμε πάνω από τους ούτως ή άλλως.
Έτσι, μπορούμε να αρχίσουμε με αυτά: "Πώς ένα βρόχο, ενώ διαφέρουν από ένα do-while loop;
Πότε είναι η τελευταία ιδιαίτερα χρήσιμο; "
Έτσι, κάποιος που έχει κάποια -;
[Φοιτητικό] Το do-while loop θα είναι πάντα εκτελέσει τουλάχιστον μία φορά.
Ναι. Έτσι, αυτή είναι η διαφορά. Ένας βρόχος ενώ - I'll το κάνει μόνο για εδώ - ενώ βρόχο, έχουμε την κατάσταση
δεξιά εδώ, ενώ ένα do-ενώ, δεν έχετε μια κατάσταση μέχρι να φτάσουμε εδώ κάτω.
Και έτσι, όταν το πρόγραμμά σας είναι εκτέλεση, και αυτό γίνεται με το βρόχο while,
ελέγχει αμέσως εάν αυτή η συνθήκη είναι αληθής.
Αν αυτή η κατάσταση δεν είναι αλήθεια, απλά θα παρακάμψουν εντελώς το βρόχο.
Do-while loop, όπως το πρόγραμμα εκτελεί, να παίρνει το "κάνει".
Τίποτα δεν θα συμβεί σε αυτό το σημείο, απλά συνεχίζει την εκτέλεση.
Στη συνέχεια, όταν χτυπά το «λίγο», αν η συνθήκη είναι αληθής, αυτό θα στραφεί προς τα πίσω και να το κάνουμε ξανά
και ξανά και ξανά έως ότου η κατάσταση δεν είναι αλήθεια και στη συνέχεια, μόλις πέφτει μέσα.
Έτσι, η διαφορά είναι, ότι αυτό μπορεί να παραλείψετε το δικαίωμα από την αρχή.
Αυτό εκτελεί κατ 'ανάγκην μια φορά και στη συνέχεια μπορεί να εκτελέσει περισσότερες φορές, αν η κατάσταση εξακολουθεί να είναι αλήθεια.
Έτσι, ενώ ο βρόχος θα το κάνει μόνο μια φορά, ή - το βρόχο, ενώ - δεν μπορεί να χρειαστεί να το κάνουμε καθόλου,
από τη στιγμή που θα πάρει σε αυτό, αν η κατάσταση είναι ψευδής, απλά θα προχωρήσετε κατευθείαν πάνω του.
Ότι η do-while loop, εμείς θα το εκτελέσει μία φορά, κατ 'ανάγκην.
Στη συνέχεια, όταν θα φτάσουμε στην κατάσταση, ελέγχουμε αν είναι αληθείς ή ψευδείς.
Αν είναι αλήθεια, θα το κάνουμε και πάλι? Αν είναι ψευδής, απλά θα συνεχίσει πηγαίνει.
Έτσι, όταν ο τελευταίος είναι ιδιαίτερα χρήσιμη;
Έτσι μπορώ να πω ότι στο σύνολο των 4 ετών, 3 ετών, οτιδήποτε,
ότι έχω προγραμματισμό, έχω χρησιμοποιήσει αυτό, όπως, κάτω από 10 φορές.
Και πιθανώς 5 από αυτούς είναι σε CS50 όταν είμαστε εισαγωγή do-while.
Έτσι, όταν δεν έχετε χρησιμοποιήσει do-while loops;
Πότε είναι η - ναι;
[Φοιτητικό] Όταν προσπαθείτε να πάρετε είσοδο του χρήστη, ή κάτι που θέλετε να ελέγξετε -
Ναι. Έτσι, do-while loops, εισάγετε το όνομα χρήστη είναι το μεγάλο.
Αυτός είναι ο λόγος για τις πρώτες σειρές πρόβλημα ζευγάρι, όταν θέλετε να ζητήσει από το χρήστη, όπως,
"Δώσε μου ένα string," δεν μπορείτε να συνεχίσετε μέχρι να πάρετε αυτό το string.
Και έτσι, αναγκαστικά, πρέπει να ζητήσει τη σειρά, τουλάχιστον μία φορά.
Στη συνέχεια, όμως, αν απαντήσει κάτι κακό, τότε θα πρέπει να βρόχο πίσω και να ζητήσει και πάλι.
Αλλά εκτός από παρέμβαση του χρήστη, είναι πολύ σπάνιο ότι έχω συναντήσει μια υπόθεση
όπου θέλω να βρόχο »τουλάχιστον μία φορά", αλλά ενδεχομένως περισσότερο.
Ερωτήσεις ή -; Έχει κανείς χρησιμοποιείται ένα do-while loop οπουδήποτε αλλού;
Εντάξει. Έτσι, η επόμενη θα είναι, "Τι σημαίνει αδήλωτη αναγνωριστικό
συνήθως δείχνουν αν εξάγεται από την κλαγγή; "
Οπότε τι είδους κώδικα θα μπορούσε να γράφω για να πάρει «αδήλωτη αναγνωριστικό;
[Φοιτητικό] Αυτό x = 2;
Έτσι, μπορούμε να το δοκιμάσετε ακριβώς εδώ, x = 2.
Θα τρέξει αυτό - ω, εγώ δεν το κλικ. Έτσι, εδώ έχουμε - όλα τα δικαιώματα.
"Η χρήση της αδήλωτης x αναγνωριστικό."
Έτσι, αυτή είναι η αδήλωτη αναγνωριστικό, μια μεταβλητή.
Θα καλείτε συχνά μια μεταβλητή ένα αναγνωριστικό.
Γι 'αυτό ίσως να μην γνωρίζουν ότι είναι στην πραγματικότητα μια μεταβλητή? Δεν ξέρω τι είναι.
Γι 'αυτό είναι ένα αναγνωριστικό.
Έτσι, γιατί είναι αδήλωτη; Ναι.
Έτσι, για να είναι σαφής σχετικά με την ορολογία, η δήλωση μιας μεταβλητής
είναι όταν λέτε "int x," ή "string y," Ό, τι.
Η αρχικοποίηση της μεταβλητής, ή η εκχώρηση της μεταβλητής,
είναι κάθε φορά που λέτε "x = 2."
Έτσι, μπορούμε να κάνουμε αυτά σε ξεχωριστά βήματα, int x, x = 2, και έως ότου - μπορούμε να έχουμε ένα σωρό πράγματα εδώ -
αλλά μέχρι να συμβεί αυτή η γραμμή, x εξακολουθεί να έχει προετοιμαστεί, αλλά δεν έχει δηλωθεί.
Και έτσι μπορούμε να το κάνουμε προφανώς σε 1 γραμμή, και τώρα είμαστε δήλωση και αρχικοποίηση.
Ερωτήσεις;
Και τέλος, "Γιατί είναι το Cipher Caesar δεν είναι πολύ ασφαλής;"
Έτσι, η πρώτη, δεν θέλει κανείς να πει ποιο είναι το Cipher Caesar είναι;
[Φοιτητικό] Caesar Cipher είναι ακριβώς ότι θα χαρτογραφήσει, θα μετατοπιστεί κάθε γράμμα,
ορισμένα γράμματα πάει πάνω, και να επιστρέψει πάνω, και δεν είναι πολύ ασφαλές, διότι
υπάρχει μόνο 26 πιθανές επιλογές και απλά πρέπει να δοκιμάσετε κάθε 1 από αυτά μέχρι να το πάρει.
Αχ. Έτσι, θα πρέπει να επαναλάβουμε;
Το Caesar Cipher, it's - Θέλω να πω, θα πρέπει να ασχολούνται με αυτό για τα προβλήματα που μπορεί -
ή μάλλον το πρότυπο έκδοση του συνόλου πρόβλημα που δεν είναι στην έκδοση χάκερ.
Έτσι, για την τυπική έκδοση για το σύνολο πρόβλημα, μπορείτε να πάρετε ένα μήνυμα όπως, "Hello, world"
και έχετε επίσης έναν αριθμό, όπως 6, και να πάρετε αυτό το μήνυμα, και κάθε μεμονωμένο χαρακτήρα,
μπορείτε να περιστρέψετε κατά 6 θέσεις στο αλφάβητο.
Έτσι, το «h» στο Γεια σας, θα γίνει h-i-j-k-l-m-n.
Έτσι, το πρώτο γράμμα θα είναι n. Εμείς κάνουμε το ίδιο πράγμα με το ηλεκτρονικό.
Αν έχουμε ένα, όπως, z ή κάτι τέτοιο, τότε θα γυρίσει πίσω περίπου σε «ένα».
Όμως, κάθε χαρακτήρας παίρνει εναλλάσσονται 6 χαρακτήρες αργότερα στο αλφάβητο, και δεν είναι πολύ ασφαλές
δεδομένου ότι υπάρχουν μόνο 26 δυνατότητες για το πώς πολλοί τρόποι που μπορείτε να τυλίξετε ένα μόνο γράμμα.
Έτσι, μπορείτε να δοκιμάσετε μόλις 26 από όλα αυτά και, κατά πάσα πιθανότητα, για ένα αρκετά μεγάλο χρονικό διάστημα το μήνυμα,
μόνο 1 από αυτά είναι δυνατόν 26 πράγματα πρόκειται να είναι ευανάγνωστες,
και το ευανάγνωστο κανείς δεν πρόκειται να είναι το αρχικό μήνυμα.
Έτσι δεν είναι ένας πολύ καλός τρόπος για την κρυπτογράφηση οτιδήποτε.
Άσχετα με τις ταινίες μικρού μήκους, "Τι είναι η λειτουργία;"
Έτσι τι είναι μια συνάρτηση; Ναι.
[Φοιτητικό] Είναι σαν ένα ξεχωριστό κομμάτι του κώδικα που μπορείτε να καλέσετε για να περάσει και στη συνέχεια να πάρει την τιμή που επιστρέφει οτιδήποτε άλλο.
Ναι. Γι 'αυτό θα απαντήσω επίσης με την επόμενη απάντηση - ή επανάληψη απαντώντας επίσης με μόνο το επόμενο.
Μπορείτε να χρησιμοποιήσετε τις λειτουργίες και όχι μόνο αντιγραφή και επικόλληση του κώδικα ξανά και ξανά.
Απλώς πάρτε αυτόν τον κώδικα, να το βάλετε σε ένα fuction, και τότε θα μπορούσαμε να ονομάσουμε μόνο τη λειτουργία
όπου κι αν έχουν αντιγραφή και επικόλληση.
Έτσι λειτουργίες είναι χρήσιμα.
Έτσι τώρα θα κάνουμε πραγματικά προβλήματα.
Το πρώτο. Έτσι, η ιδέα του πρώτου είναι, θα περάσει ένα string, και ανεξάρτητα από το -
ή μήπως να πω όλα τα πεζά; Δεν λέει όλα πεζά.
Έτσι, το μήνυμα μπορεί να είναι οτιδήποτε, και - Ω, όχι. Το κάνει.
"Για απλότητα, μπορεί να υποθέσει ότι ο χρήστης θα είσοδος μόνο πεζά γράμματα και κενά."
Έτσι περνάμε ένα μήνυμα ότι μόνο με πεζά γράμματα και στη συνέχεια θα εναλλάσσονται
μεταξύ κεφαλαίων και πεζών - αλλάζουμε το string να είναι κεφαλαία και πεζά, εναλλάξ.
Έτσι, πριν σας δίνουμε μια δεύτερη, ακόμη και να βουτήξει στο πρόβλημα,
ποιο είναι το πρώτο πράγμα που πρέπει να κάνουμε;
Ω, τι έκανα απλά κάντε κλικ πάνω; Ω, απλά κάνετε κλικ σε ένα e-mail εδώ.
Έτσι, το πρώτο πράγμα που πρέπει να κάνουμε - είμαι κοιτάζοντας το λάθος;
Είναι αυτό το μέρος του αυτό;
Όχι, αυτά είναι ακόμα εκεί, όμως.
Εντάξει, ακόμα εδώ.
Τώρα δεν μπορούμε να υποθέσουμε -; Ναι. Εδώ δεν μπορούμε να υποθέσουμε ότι αυτό είναι μόνο πεζά και χώρους.
Έτσι, τώρα θα πρέπει να ασχοληθεί με το γεγονός ότι τα γράμματα μπορεί να είναι ό, τι θέλουμε να είναι.
Και έτσι το πρώτο πράγμα που θέλουμε να κάνουμε είναι να πάρει ακριβώς το μήνυμα.
Εμείς το μόνο που χρειάζεται για να πάρετε μια χορδή, χορδή s = GetString, εντάξει.
Τώρα αυτό το πρόβλημα, υπάρχουν δύο τρόποι για να γίνει αυτό.
Αλλά θέλουμε να θέλετε να χρησιμοποιήσετε bitwise φορείς εδώ.
Υπάρχουν άνθρωποι οι οποίοι είτε δεν ήταν σε supersection,
ή κάτι τέτοιο, και δεν ξέρω τι είναι bitwise φορείς;
Ή πώς αυτές συνδέονται με ASCII με οποιονδήποτε τρόπο;
[Φοιτητικό] δεν ήμουν στο supersection, αλλά ξέρω τι είναι bitwise φορείς.
Εντάξει. Μέχρι τότε δεν έχω να πάω πάνω από τα βασικά από αυτά, αλλά θα εξηγήσω
τι θα πάμε να θέλετε να χρησιμοποιήσετε εδώ.
Έτσι «Α»: Δυαδική αναπαράσταση του κεφαλαίου Α, ο αριθμός είναι 65.
Είμαι ακριβώς πρόκειται να δούμε - 41 θα είναι 01000001.
Έτσι, αυτό πρέπει να είναι 65 στο δεκαδικό? Έτσι αυτό είναι η δυαδική αναπαράσταση του χαρακτήρα του κεφαλαίου Α.
Τώρα, η δυαδική αναπαράσταση του χαρακτήρα πεζά γράμματα «a»
πρόκειται να είναι το ίδιο πράγμα, σχεδόν. Είναι ότι - 6, ναι. Αυτό είναι σωστό.
Έτσι δυαδικό κεφάλαιο Α, δυαδική πεζό «ένα».
Έτσι, παρατηρούμε ότι η διαφορά μεταξύ Α και «a» είναι το ενιαίο κομμάτι.
Και αυτό συμβαίνει να είναι η 32 bit, το bit που αντιπροσωπεύει τον αριθμό 32.
Και αυτό είναι λογικό δεδομένου ότι είναι 65 A? «Α» είναι 97.
Η διαφορά μεταξύ τους είναι 32.
Έτσι τώρα ξέρουμε ότι μπορεί να μετατρέψει από Α σε «Α» από τη λήψη
Oring και το bitwise, με - αυτό μοιάζει με ένα 1.
Αυτό είναι ένα bitwise OR, με 00100000, και ότι θα μας δώσει «ένα».
Και μπορούμε να πάρουμε από το «Α» σε Α από bitwise Anding
με 11, 0 σε αυτή τη θέση, 11111.
Έτσι, αυτό θα μας δώσει τότε ακριβώς τι «α» ήταν? Αλλά ακυρώσει την ατομική λίγο,
έτσι θα έχουμε 01000001? Δεν ξέρω αν μέτρησα σωστά.
Αλλά αυτή η τεχνική του bitwise Oring για να πάρει από το κεφάλαιο σε πεζά,
και bitwise Anding να πάρει από πεζά σε κεφάλαια δεν είναι αποκλειστικότητα των Α.
Όλα τα γράμματα, Κ vs k, Ζ vs z,
όλοι τους είναι ακριβώς πρόκειται να διαφέρει από αυτό το μοναδικό κομμάτι.
Και έτσι μπορείτε να χρησιμοποιήσετε αυτό για να αλλάξετε οποιαδήποτε από πεζό σε κάθε κεφαλαίο γράμμα και το αντίστροφο.
Εντάξει. Έτσι, ένας εύκολος τρόπος για να πάρει από αυτό - έτσι, αντί να χρειάζεται να
γράψτε ό, τι είναι 1011111 - ένας εύκολος τρόπος για να αντιπροσωπεύει τον αριθμό αυτό, και αυτό δεν είναι ένα
ότι πήγα πάνω στο supersection, αλλά περισπωμένη (~) είναι μια άλλη bitwise χειριστή.
Τι ~ που κάνει είναι να εξετάζει την παράσταση λίγο.
Ας πάρουμε οποιοδήποτε αριθμό.
Αυτό είναι μόνο μερικά δυαδικό αριθμό, και τι ~ δεν είναι απλώς αντιστρέφει όλα τα bits.
Έτσι, αυτό ήταν ένα 1, τώρα ένα 0, αυτό είναι ένα 0, τώρα ένα 1, 010100.
Έτσι, αυτό είναι όλο ~ κάνει. Έτσι, 32, πρόκειται να είναι ο αριθμός - να απαλλαγούμε από αυτό -
οπότε 32 πρόκειται να είναι ο αριθμός 00100000, και έτσι ~ αυτής πρόκειται να είναι
Ο αριθμός αυτός εδώ ότι ANDed «ένα» με.
Μήπως όλοι το είδατε αυτό; Αυτό είναι αρκετά κοινό, όπως και όταν θέλετε να υπολογίσετε
για αργότερα πράγματα που θα μπορούσαμε να δούμε, όταν θέλουμε να δούμε αν -
ή θέλουμε τα πάντα, κάθε ενιαίο σύνολο λίγο εκτός για 1
έχετε την τάση να κάνετε ~ από το κομμάτι που δεν θέλετε να ρυθμίσετε.
Έτσι, δεν θέλουμε σύνολο των 32 bit, έτσι ώστε να μην ~ του 32.
Εντάξει. Έτσι, μπορούμε να χρησιμοποιήσουμε όλα αυτά εδώ.
Εντάξει, γι 'αυτό είναι καλό, αν δεν είστε γίνει, σιγά-σιγά θα περπατήσει πάνω μαζί,
ή με τα πόδια πάνω από αυτό, έτσι - μέσα από αυτό. Περπατήστε μέσα από αυτό.
Έτσι έχουμε σειρά μας, και θέλουμε να βρόχο πάνω από κάθε χαρακτήρα στην εν λόγω σειρά και να κάνουμε κάτι για αυτό.
Πώς, λοιπόν, εμείς βρόχο πάνω από ένα string; Τι πρέπει να χρησιμοποιήσω;
Είμαι δεν πρόκειται να το κάνει για εδώ. Ναι.
Έτσι έχω iterator μου, και το είπε, αλλά πώς μπορώ να ξέρω πόσοι χαρακτήρες είναι στη σειρά;
Strlen (-ες), τότε θ + +.
Έτσι, ό, τι έχω κάνει εδώ δεν είναι ο καλύτερος τρόπος για να κάνουμε πράγματα.
Ξέρει κανείς γιατί;
Επειδή είστε έλεγχο της γλώσσας του string κάθε φορά.
Γι 'αυτό και πρόκειται να θέλουν να μετακινηθούν strlen, θα μπορούσα να πω εδώ, int length = strlen (s),
και στη συνέχεια μπορώ να <μήκος, και σε περίπτωση που δεν έχετε δει πριν,
Θα μπορούσα επίσης να κάνω int i = 0, μήκος = strlen (s).
Και έτσι αυτό είναι κάπως προτιμότερο, αφού τώρα έχω περιορίσει το πεδίο εφαρμογής
του μεταβλητού μήκους ακριβώς αυτό "για" βρόχο, αντί γι 'αυτό πριν από την κήρυξη
και ότι υπάρχει πάντα, και σε περίπτωση που δεν πιάσει γιατί αυτό είναι κακό,
ή γιατί η αρχική ήταν κακή, it's - ξεκινούν από το βρόχο for.
Έλεγξα την κατάσταση. Είναι i <το μήκος του s;
Έτσι, το μήκος του s, ας εργαστούμε με "γεια" ολόκληρο το χρόνο.
Έτσι μήκος των s, h-ε-λ-λ-o. Μήκος είναι 5.
Έτσι, i = 0, το μήκος είναι 5, γι 'αυτό δεν είναι <5, έτσι ώστε ο βρόχος συνεχίζει.
Στη συνέχεια, πάμε πάλι. Ελέγχουμε την κατάσταση. Είναι i <το μήκος του γεια;
Έτσι, ας ελέγξει το μήκος του γεια. H-e-l-l-o. Αυτό είναι 5? I δεν είναι <5, οπότε συνεχίζουμε και πάλι.
Γι 'αυτό και τον υπολογισμό, υπολογίζουμε γειά σου, για κάθε επανάληψη του βρόχου,
παρ 'όλο που ποτέ δεν πρόκειται να αλλάξει? είναι πάντα πρόκειται να είναι 5.
Έτσι θυμόμαστε μόλις 5 μπροστά, και τώρα όλα είναι καλύτερα.
Έτσι επανάληψη καθ 'όλη τη σειρά.
Τι θέλουμε να κάνουμε για κάθε χαρακτήρα του string;
[Μιλώντας Φοιτητών, ακατάληπτο]
Ναι. Έτσι, αν ο χαρακτήρας είναι μη-αλφαβητικό, τότε απλά θέλετε να παρακάμψετε αυτό.
Επειδή μόνο νοιάζονται για αλφαβητική γράμματα? Δεν μπορούμε να επωφεληθούμε από έναν αριθμό.
Λοιπόν, πώς μπορούμε να το κάνουμε αυτό; Έτσι κατάσταση μας, οπότε αν θέλουμε κάτι - ελέγξτε αν είναι αλφαβητική.
Επομένως, πώς θα το ελέγξετε;
[Φοιτητικό] Μπορείτε να χρησιμοποιήσετε μόνο τη λειτουργία είναι άλφα.
Είναι που περιλαμβάνονται σε κάποιο από αυτά, ή οποιαδήποτε περιλαμβάνουν, όπως, char.h ή κάτι άλλο;
Ας μην χρησιμοποιήσετε τη λειτουργία είναι άλφα, και να χρησιμοποιήσετε το ρητό - έτσι έχουμε s [i],
που είναι η όγδοη χαρακτήρας του s, να θυμάστε ότι ένα string είναι μια σειρά χαρακτήρων,
έτσι ώστε η όγδοη χαρακτήρας του s.
Τώρα, αν είναι ένα κεφαλαίο γράμμα, γνωρίζουμε ότι πρέπει να είναι σε ένα συγκεκριμένο εύρος.
Και αυτό είναι που κυμαίνονται;
Ναι. Έτσι, αν s [i] είναι ≥ 65, και s [i] είναι ≤ 90, τι πρέπει να κάνω αντ 'αυτού;
Ναι. Έτσι θα πρέπει να είναι απολύτως δεν χρειάζεται καν να γνωρίζουν τις τιμές ASCII από ποτέ τίποτα.
Ποτέ μην πιστεύουν τους αριθμούς 65, 90, 97 και 102, ή ό, τι είναι.
Δεν χρειάζεται - 112 - δεν χρειάζεται να γνωρίζουν εκείνοι καθόλου. Αυτό είναι πολύ λάθος.
Χρησιμοποιείτε μόνο τις απόστροφος χαρακτήρες, μόνο σταθερές απόσπασμα. Έτσι «Α» και λιγότερο από 90 είναι «Ζ.»
Και αυτό είναι πολύ καλύτερα - δεν ξέρω από την κορυφή του κεφαλιού μου ότι το Ζ είναι 90.
Ξέρω από την κορυφή του κεφαλιού μου ότι «Ζ», είναι η πρωτεύουσα της Ζ.
Έτσι, εφ 'όσον αυτό είναι της τάξεως του κεφαλαίου Α έως Ζ του κεφαλαίου, ή μπορούμε να ελέγξουμε για πεζούς,
Ή αν είναι στο εύρος ≥ «α» και ≤ z.
Έτσι, αυτό είναι κατάσταση μας.
Το στυλ για το πού να βάλει αυτά τα πράγματα διαφέρουν.
Θα το κάνω σαν αυτό.
Τώρα, αυτό που θέλουμε να κάνουμε;
Ξέρουμε ότι αυτή η επιστολή είναι ένα χαρακτήρα, ένα γράμμα του αλφαβήτου.
Γι 'αυτό και πρέπει να εναλλάσσονται μεταξύ πόσον αυτό θα πρέπει τώρα να είναι ένα κεφαλαίο γράμμα ή ένα πεζό γράμμα.
Πώς να παρακολουθείτε ένα από τα οποία θέλουμε να είναι;
[Φωνές σπουδαστών, ακατάληπτο]
Οπότε ναι, αλλά επιτρέψτε μου να ελέγξει.
Ενότητα 0-2 ειπώθηκε, ήταν μια πρόταση πέταξαν έξω, και συμφωνώ με αυτό.
Εκτός από ειδοποίηση ότι, όπως - είναι αυτή η περίπτωση; Ναι.
Είναι κάθε άλλο, αλλά δεν μπορούμε να ενότητα 2 του i, ή i mod 2, αφού
παρατηρήσετε ότι η Ε είναι η πρωτεύουσα και «a» είναι πεζό; Αλλά υπάρχει ένας χώρος που τους χωρίζει;
Έτσι, από όπου και αν πρόκειται να είναι το ίδιο mod 2, αλλά είναι διαφορετικές περιπτώσεις.
[Ερώτηση Φοιτητών, ακατάληπτο]
Ναι. Έτσι, είμαστε ακριβώς πρόκειται να κρατήσει μια καταμέτρηση.
Θα μπορούσαμε να κάνουμε, επίσης, ότι εδώ αν θέλαμε? Αυτό ίσως πάρει λίγο δυσκίνητο
στο βρόχο για τις δηλώσεις? Θα το βάλω εδώ.
Έτσι, int count = ξεκινά από το 0.
Και έτσι τώρα, πάω να μετρήσει πόσες αλφαβητικούς χαρακτήρες που είχαμε.
Έτσι είμαστε αναπόφευκτα θα μετρήσει + + αφού βρήκαμε ένα άλλο γράμμα της αλφαβήτου.
Αλλά, έτσι και τώρα λέτε αν mod αριθμός 2.
Τι κι αν μετράνε mod 2; Αχ. Θα κάνω == 0 για τώρα.
Επίσης, θα πάμε πάνω από αυτό. Έτσι, αν μετράνε mod 2 == 0, τότε τι;
[Φοιτητές απάντηση, ακατάληπτο]
Έτσι, θέλουμε να καταλήξουμε κεφαλαία.
Υπάρχουν 2 περιπτώσεις? Κεφαλαία και πεζά γράμματα είναι οι 2 περιπτώσεις.
Έτσι, αν είμαστε σε πεζά πρέπει να κάνουμε είναι κεφαλαία.
Αν είναι κεφαλαία δεν χρειάζεται να κάνετε τίποτα.
Αλλά, είναι ένας τρόπος υπάρχει - shouldn't έχουν γυρίσει -
ότι δεν χρειάζεται καν να ελέγξει αν είναι κεφαλαία ή πεζά;
Τι μπορούμε να κάνουμε για να βεβαιωθείτε ότι πάντα καταλήγουν σε κεφαλαία;
Έτσι παρατηρήσετε τι κάναμε για πεζό «Α»? Τι θα γινόταν αν κάναμε το ίδιο ακριβώς πράγμα που πρέπει να κεφαλαίο Α;
Μήπως κεφαλαία Μια αλλαγή, ή αλλάζει η τιμή;
Ναι. Έτσι, κάθε κεφαλαίο γράμμα bitwise ANDed με ~ 32 θα είναι το ίδιο κεφαλαίο χαρακτήρα
επειδή για κάθε κεφαλαίο χαρακτήρα η 32η κομμάτι δεν έχει οριστεί.
Έτσι, αν θέλουμε να φέρουμε το χαρακτήρα s [i], θέλουμε να γίνει πεζά ή κεφαλαία.
Έτσι, αν ήταν πεζό, είναι τώρα κεφαλαία, αν ήταν κεφαλαία, είναι ακόμα κεφαλαία, και αυτό είναι όλο.
Το είπα αυτό στην supersection: Μπορείτε να χρησιμοποιήσετε 32, αν θέλετε, αλλά έχω την τάση να προτιμούν να κάνει «ένα» - Α,
αντί απλά 32, επειδή μπορεί να είναι οποιαδήποτε άλλη bit.
Μετά την 32 bit, αυτό μπορεί να είναι οποιοδήποτε από αυτά, ή δεν θα έχουν αρκετή
αριθμοί να εκπροσωπεί όλους τους χαρακτήρες.
Έτσι, εάν παίρνετε το 32 bit, θα μπορούσε να είναι η 64 bit, θα μπορούσε να είναι το 128 bit.
Οποιαδήποτε από αυτές τις bits θα μπορούσε να είναι το κομμάτι που κάνει διάκριση μεταξύ πεζών και κεφαλαίων.
Δεν πρέπει να πρέπει να ξέρετε ότι είναι το 32 bit.
Μπορώ να χρησιμοποιήσω αυτό το «α» - Μια για να πάρει το κομμάτι που διαφέρει μεταξύ των δύο
χωρίς να χρειάζεται να επικαλεστεί το μαγικό αριθμό που είναι 32.
Και έτσι τώρα, αλλιώς υπολογίζει ήταν περίεργο, και έτσι ό, τι θέλω να κάνω;
[Απαντήσεις σπουδαστών, ακατάληπτο]
[Φοιτητικό] Τι είναι αυτό;
Θα το κάνω σε 1 δευτερόλεπτο.
Έτσι τώρα, αν θέλω να - Θέλω να βεβαιωθείτε ότι ο χαρακτήρας είναι τώρα πεζά,
και γι 'αυτό μπορεί ή κατά 32, και «ένα» 32 έννοια - Α.
Αλλά ειδοποίηση, με την ίδια λογική όπως και το προηγούμενο, ότι αν
η επιστολή ήταν ήδη πεζά, τότε Oring κατά 32 μόλις κρατά πεζά γράμματα.
Δεν έχει αλλάξει το αρχικό του χαρακτήρα.
Αλλά τώρα δεν έχω να αποφύγετε λέγοντας: «Αν είναι πεζά, απλά ξεχάστε το,
αν είναι κεφαλαία, να αλλάξει στη συνέχεια. "
Είναι πολύ πιο βολικό να το κάνουμε αυτό.
[Φοιτητικό] Θα ότι η στρατηγική της αφαιρώντας τα κεφαλαία από τα πεζά έργο αν δεν ήταν 32;
Αν ήταν, ήθελε, 34 ή κάτι άλλο;
Έτσι, θα πρέπει να γνωρίζετε ότι η διαφορά μεταξύ των 2 είναι -; >> 1 bit.
Θα μπορούσε να είναι περισσότερο από 1 bit, εφ 'όσον όλα τα bits κάτω από αυτή τη θέση είναι το ίδιο.
Έτσι, χρειαζόμαστε τουλάχιστον 26 χαρακτήρες - ή, υπάρχουν 26 χαρακτήρες.
Έτσι, χρειαζόμαστε τουλάχιστον 26 αριθμούς να αντιπροσωπεύουν τη διαφορά -
Η διαφορά μεταξύ του Α και «a» πρέπει να είναι τουλάχιστον 26,
ή αλλιώς δεν θα είχαμε εκπροσωπούνται όλοι οι αριθμοί κεφαλαίου.
Αυτό σημαίνει ότι Α, αν αρχίσουμε σε 1, πρόκειται να χρησιμοποιήσει όλα αυτά τα κομμάτια,
όλα αυτά τα πρώτα 5 bits, να εκπροσωπεί τα πάντα μέσω Z.
Γι 'αυτό το επόμενο κομμάτι, ή αυτό το κομμάτι, το επόμενο κομμάτι είναι το ένα που είναι επιλέχθηκε να γίνει διάκριση μεταξύ Α και «ένα».
Αυτός είναι και ο λόγος που, σε ASCII πίνακα, υπάρχουν 5 σύμβολα με κεφαλαία γράμματα χωρίζουν από πεζά γράμματα.
Δεδομένου ότι αυτά είναι τα σύμβολα, η επιπλέον 5 που φέρνει μέχρι το 32 να είναι η διαφορά μεταξύ τους.
[Φοιτητικό] Έτσι, θα μπορούσαμε να το κάνουμε, επειδή ASCII είναι σχεδιασμένο με αυτόν τον τρόπο.
Ναι. Αλλά ASCII - η διαφορά θα μπορούσε επίσης να είναι και τα δύο από αυτά τα bits.
Όπως, αν ήταν μια 10000001, και «ένα» ήταν 11100001 - ξεχάσω, όποια κι αν είναι.
Αλλά αν ήταν αυτό, τότε θα μπορούσαμε να εξακολουθούν να χρησιμοποιούν «ένα» - Α.
Είναι μόλις τώρα η διαφορά μεταξύ Α και «a» εξακολουθεί να είναι αυτά τα 2 bits.
Νομίζω ότι είναι γραμμένο 48. Είναι 32 + 64; Νομίζω ότι είναι;
Θα εξακολουθεί να είναι 2 bits? Κάθε χαρακτήρα, όπως, Ζ και z, K και k,
θα εξακολουθούν να έχουν τα ίδια ακριβώς κομμάτια που εκτός από τα 2 bits.
Έτσι, εφ 'όσον αυτό είναι πάντα αλήθεια, ανεξάρτητα από το αν είμαστε χρησιμοποιώντας ASCII ή κάποιο άλλο σύστημα,
εφ 'όσον υπάρχει μόνο ένας αριθμός σετ των μπιτ που είναι διαφορετικά για κάθε χαρακτήρα,
τότε αυτό λειτουργεί το πρόστιμο.
Είναι απλά ότι το 32 δημιουργήθηκε επειδή είναι η πρώτη που θα μπορούσε ενδεχομένως να χρησιμοποιήσουν. >> Cool.
Έχω την τάση να προτιμούν, σε περίπτωση που δεν έχετε δει, αν το μπλοκ είναι μόνο μια ενιαία γραμμή,
μπορείτε να απαλλαγείτε από τα άγκιστρα? γι 'αυτό τείνουν να προτιμούν να γίνει αυτό.
Επίσης, ξέρετε πώς μπορούμε να κάνουμε τα πράγματα όπως s [i] + = 1;
Μπορείτε επίσης να κάνετε s [i] bitwise AND = 32.
Και bitwise OR = 32.
Επίσης, μετράνε mod 2 == 0.
Έτσι, να θυμάστε ότι - δεν θα το γράψω - οποιαδήποτε μη μηδενική τιμή είναι αλήθεια, και το 0 είναι ψευδής.
Έτσι, «αν μετράνε mod 2 == 0" είναι το ίδιο με το να λέμε "αν δεν μετράνε mod 2."
Εγώ κατά πάσα πιθανότητα θα αντιστραφεί μόνο τις γραμμές και είπε, "αν μετράνε mod 2,
Ή δεν το 1, αλλιώς δεν το ΚΑΙ 1 », έτσι ώστε να μπορώ, δεν χρειάζεται το" όχι ".
Αλλά αυτό λειτουργεί εξίσου καλά.
Και ό, τι άλλο μπορώ να κάνω εδώ;
Θα μπορούσατε να τα συνδυάσετε με τριμερή αν θέλετε, αλλά τότε αυτό θα κάνει τα πράγματα απλά Μεσιέ
και ίσως πιο δύσκολο να διαβάσει, έτσι δεν θα το κάνουμε αυτό.
Όποιος έχει κάποιες άλλες προτάσεις;
Είναι ότι όλοι το πρόβλημα ζήτησε; Ω ναι.
Έτσι, να απαλλαγούμε από αυτές τις κενές γραμμές, τώρα θα εκτυπώσετε f,% s είναι το ένα για έγχορδα,
Θα εκτυπώσετε f, s.
Τώρα ας το τρέξει. Μήπως κάνω κάτι λάθος;
Αυτό είναι ένα \ "? Θέλω μια n.
Εντάξει. Τώρα θα το τρέξει. Είναι κατά πάσα πιθανότητα θα μου φωνάζεις.
Strlen είναι σε string.h.
Έτσι, αυτό είναι το ωραίο πράγμα για Clang είναι αυτό που λέει ό, τι είναι μέσα,
αντί του ΣΣΚ που απλά λέει, "Hey, έχετε ξεχάσει κάτι, δεν ξέρω τι ήταν."
Αλλά αυτό θα μου πείτε, "Θα σήμαινε να συμπεριλάβει string.h."
Γι 'αυτό και δεν ζητά τίποτα, γι' αυτό δεν λέει τίποτα.
Αλλά εμείς θα κάνουμε το παράδειγμά τους, "Thanks 4 the add".
Αυτό φαίνεται σωστό. Ζήτω.
Έτσι, επιστρέφοντας στην κύρια σας, να κάνω ποτέ σχεδόν.
Είναι προαιρετική. Και κύρια είναι η μόνη λειτουργία για την οποία είναι προαιρετική.
Αν δεν επιστρέψει τίποτα από τον κύριο, είναι δεδομένο ότι θα σήμαινε την επιστροφή 0.
Ερωτήσεις;
Εντάξει. Έτσι τώρα το δεύτερο πρόβλημα.
"Ανάκληση από δεύτερη διάλεξη 2 εβδομάδες ότι αλλάζουν οι τιμές 2 μεταβλητών» με το πέρασμα
οι 2 μεταβλητές σε μια λειτουργία (έστω και αν ονομάζεται swap) δεν λειτουργεί ακριβώς, τουλάχιστον όχι χωρίς «δείκτες». "
Και αγνοούν δείκτες μέχρι να φτάσουμε σε αυτά.
Θέλουμε να ανταλλάξουν 2 μεταβλητές? Δεν είμαστε χρησιμοποιώντας μια λειτουργία για να το κάνει.
Είμαστε ακόμα πρόκειται να το κάνει στην κύρια όπως λέει.
Αλλά για να χρησιμοποιήσετε αυτές τις 2 μεταβλητές, δεν θέλετε να χρησιμοποιήσετε μια προσωρινή μεταβλητή.
Υπάρχουν 2 τρόποι να γίνει αυτό.
Μπορείτε να το κάνετε με τη χρήση παραδοσιακών εμπορευομένων δυαδικό σας.
Έτσι, Ξέρει κανείς ένα γρήγορο και βρώμικο τρόπο για να γίνει αυτό;
Μπορεί να πάρει πραγματικά ένα λεπτό σκέψης. Αν έχω -
Θα ρυθμίσετε το πρόβλημα επάνω όπως ζητούν. Έτσι, αν έχω 2 μεταβλητές, A, η οποία είναι απλώς ένας ακέραιος
ότι θα μου δώσει, και ποσό μεταβλητή Β, το οποίο είναι ένα άλλο ακέραιο ότι είμαι δεδομένη.
Έτσι, αν έχω αυτά τα 2 μεταβλητές, τώρα θέλω να τα ανταλλάξουν.
Το παραδοσιακό, χρησιμοποιώντας τακτικές φορείς δυαδικό σας, εννοώ, όπως +, -, ÷.
Δεν bitwise φορείς που δρουν σε δυαδικό.
Έτσι, με τη χρήση -, +, ÷, και όλα αυτά.
Θα μπορούσαμε να ανταλλάξουν κάνοντας κάτι σαν α = α + β, και β = α - β, α = α - β.
Έτσι, λογική ελέγχου, και στη συνέχεια, θα δούμε ότι τα έργα γιατί.
Ας πούμε ότι α = 7, β = 3, τότε α + β πρόκειται να είναι 10.
Έτσι, είμαστε πλέον μια ρύθμιση = 10, και στη συνέχεια να κάνουμε β = α - β.
Έτσι κάνουμε β = α - β, το οποίο θα είναι 7 και β = α - β και πάλι,
ή α = α - β. Η οποία θα είναι 10 με 7 που είναι 3.
Έτσι τώρα, σωστά, «α» ήταν 7, β ήταν 3, και β τώρα είναι 7 και «a» είναι 3.
Έτσι, αυτό το είδος της νόημα? «Α» είναι ο συνδυασμός των 2 αριθμών.
Σε αυτό το σημείο, «α» είναι ο συνδυασμός, και στη συνέχεια να είμαστε αφαιρώντας από το αρχικό β,
και στη συνέχεια να είμαστε αφαιρώντας από αυτό που ήταν η αρχική «ένα».
Αλλά αυτό δεν λειτουργεί για όλους τους αριθμούς.
Για να το δούμε αυτό, ας θεωρήσουμε ένα σύστημα? Έτσι σκεφτόμαστε συνήθως ακέραιοι ως 32 bit.
Ας εργαστούμε για κάτι που είναι μόνο σαν 4 bits.
Ας ελπίσουμε ότι θα καταλήξουμε με ένα καλό παράδειγμα αυτή τη στιγμή.
Έτσι, το ξέρω, αυτό θα είναι εύκολο.
Ας πούμε 2 αριθμούς μας είναι 1111, και 1111? Έτσι είμαστε σε δυαδική αυτή τη στιγμή.
Στην πραγματικότητα δεκαδικά ψηφία, αν θέλετε να σκεφτώ με αυτόν τον τρόπο, α = 15 και β = 15.
Και έτσι περιμένουμε, αφού τους ανταλλάξουν - που δεν χρειάζεται καν να είναι οι ίδιοι αριθμοί,
αλλά το έκανα με αυτόν τον τρόπο.
Ας μην τους κάνουν τους ίδιους αριθμούς. Ας κάνουμε 1111 και 0001.
Έτσι α = 15 και b = 1.
Αφού τα ανταλλάξουν, περιμένουμε «α» να είναι 1 και το b να είναι 15.
Έτσι, το πρώτο μας βήμα είναι a = a + b.
Αριθμοί μας είναι μόνο 4 bits ευρύ, έτσι «ένα», η οποία είναι 1111, β +, το οποίο είναι 0001,
πρόκειται να καταλήγουν να είναι 10000, αλλά έχουμε μόνο 4 bits.
Έτσι τώρα ένα = 0.
Και τώρα θέλουμε να θέσουμε β = α - β - στην πραγματικότητα, αυτό εξακολουθεί να λειτουργεί τέλεια.
α = α - β - ας δούμε αν αυτό λειτουργεί τέλεια.
Έτσι, τότε β = 0 - 1, η οποία θα εξακολουθεί να είναι 15, και στη συνέχεια ένα = α - β, η οποία θα είναι 1.
Ίσως αυτό κάνει το έργο.
Νιώθω σαν να υπάρχει ένας λόγος που δεν λειτουργεί χρησιμοποιώντας τακτικές.
Εντάξει, έτσι εργάζεται με βάση την υπόθεση ότι δεν λειτουργεί με τακτικές δυαδικές πράξεις,
και εγώ θα ψάξει για - Θα το Google για να δούμε αν αυτό είναι αλήθεια.
Έτσι θέλουμε να το κάνουμε με bitwise φορείς, και η ιδέα εδώ είναι η XOR.
Έτσι, η εισαγωγή XOR (^), αν δεν το έχετε δει ακόμα.
Είναι, πάλι, ένας χειριστής bitwise έτσι ώστε να δρα σιγά-σιγά, και it's -
Εάν έχετε τα bits 0 και 1, τότε αυτό θα είναι 1.
Εάν έχετε τα bits 1 και 0, θα είναι 1, θα έχουν τα bits 0 και 0 αυτό θα είναι 0,
και αν έχετε τα bits 1 και 1 που θα είναι 0.
Έτσι είναι σαν OR. Εάν οποιοδήποτε από τα bits είναι αλήθεια, είναι 1, αλλά σε αντίθεση με OR, δεν μπορεί να είναι αμφότερα τα bits που είναι αληθείς.
Ή αυτό θα είναι 1, XOR θα πρέπει αυτό να είναι 0.
Έτσι θα πάμε να θέλουν να χρησιμοποιήσουν XOR εδώ.
Σκεφτείτε το για ένα λεπτό? Πάω στο Google.
Λοιπόν, δεν μπορείτε να διαβάσετε αυτό? Είμαι σήμερα τη συμφωνία ανταλλαγής σελίδα αλγόριθμο XOR.
Ας ελπίσουμε ότι αυτό θα εξηγήσω γιατί can't -
Αυτό ακριβώς είναι ο αλγόριθμος που μόλις έκανε.
Εγώ ακόμα δεν βλέπω γιατί - πρέπει να έχω πάρει μόνο ένα κακό παράδειγμα,
αλλά αυτή η περίπτωση όπου «α» έτυχε να γίνει 0, μετά από να πάρει έως 5 bits, έτσι και τώρα «α» είναι 0,
ότι είναι αυτό που ονομάζεται «υπερχείλιση ακεραίου."
Σύμφωνα με τη Wikipedia, "Σε αντίθεση με τη συμφωνία ανταλλαγής XOR, η τροποποίηση απαιτεί ότι χρησιμοποιεί ορισμένες μεθόδους
να εγγυηθεί ότι x + y δεν προκαλεί έναν ακέραιο υπερχείλιση ".
Έτσι, αυτό δεν έχει προβλήματα? Αυτό ήταν υπερχείλιση ακεραίου, αλλά έκανα κάτι λάθος.
Δεν είμαι σίγουρος. Θα προσπαθήσω να καταλήξουμε με ένα άλλο.
[Φοιτητικό] Λοιπόν, δεν είναι ακέραιος υπερχείλιση όταν προσπαθείτε να βάλετε μια σειρά εκεί
μεγαλύτερο από το ποσό των bits που έχουν διαθέσει;
Ναι. Έχουμε 4 bits. That's - είχαμε 4 bits, που στη συνέχεια, δοκιμάστε να προσθέσετε 1 σε αυτό, έτσι ώστε να καταλήξουμε με 5 bits.
Αλλά το πέμπτο κομμάτι μόνο αποκόπτεται, ναι.
Θα μπορούσε πραγματικά -
[Φοιτητικό] Μήπως αυτό σας ρίχνει ένα λάθος, ή ότι κάνει - ότι θα ρίξει ένα σφάλμα;
Όχι λοιπόν δεν υπάρχει σφάλμα. Όταν φτάσετε στο επίπεδο συναρμολόγησης, ένα ειδικό κομμάτι
κάπου έχει οριστεί ότι είπε ότι υπάρχει μια υπερχείλιση, αλλά σε C κατά κάποιο τρόπο απλά δεν ασχολούνται με αυτό.
Μπορείτε πραγματικά δεν μπορεί να ασχοληθεί με το θέμα εκτός και αν χρησιμοποιείτε ειδικές οδηγίες συναρμολόγησης σε C.
Ας σκεφτούμε ανταλλαγής XOR.
Και νομίζω ότι το άρθρο της Wikipedia μπορεί να έχουν επίσης λέγοντας ότι -
Γι 'αυτό και μεγάλωσε modular αριθμητική, οπότε υποθέτω ότι ήταν, θεωρητικά, να κάνει modular αριθμητική
όταν είπα ότι 0 - 1 είναι 15 και πάλι.
Έτσι που θα μπορούσε στην πραγματικότητα - σε τακτική επεξεργαστή που κάνει 0 - 1 = 15.
Από τη στιγμή που καταλήγουν σε 0, αφαιρούμε 1, έτσι ώστε στη συνέχεια να τυλίγει ακριβώς πίσω γύρω στο 1111.
Έτσι, ο αλγόριθμος αυτός μπορεί πραγματικά να λειτουργήσει, η α + β, το α - β, β - α? Που θα μπορούσε να είναι μια χαρά.
Αλλά υπάρχουν μερικοί επεξεργαστές που δεν το κάνουμε αυτό, και γι 'αυτό δεν θα ήταν μια χαρά σε αυτές τις συγκεκριμένες αυτές.
Ανταλλαγής XOR θα λειτουργήσει σε οποιοδήποτε επεξεργαστή. Εντάξει.
Η ιδέα είναι ότι υποτίθεται ότι είναι το ίδιο, όμως.
Όταν χρησιμοποιούμε XOR για να πάρει με κάποιον τρόπο τα στοιχεία και των δύο σε 1 από τις μεταβλητές,
και στη συνέχεια τραβήξτε έξω την ενημέρωση των επιμέρους μεταβλητών και πάλι.
Έτσι, κάποιος που έχει κάνει τις ιδέες / την απάντηση;
[Απάντηση Φοιτητής, ακατάληπτο]
Έτσι, αυτό θα πρέπει να εργαστεί, και επίσης, XOR είναι αντιμεταθετική.
Ανεξάρτητα από το ποια σειρά αυτές οι 2 αριθμοί τυχαίνει να είναι στο εδώ,
αυτό το αποτέλεσμα θα είναι το ίδιο.
Έτσι, ένα ^ β ^ β είναι ένα.
Μπορείτε επίσης να δείτε αυτό γραμμένο ως ^ = β, β ^ = α, α = β ^ ξανά.
Έτσι, αυτό είναι σωστό, και να δείτε γιατί αυτό λειτουργεί, σκεφτείτε τα κομμάτια.
Χρησιμοποιώντας ένα μικρούλης αριθμό, ας πούμε 11001, 01100 και.
Έτσι, αυτό είναι «ένα»? Αυτό είναι β.
Έτσι, ένα ^ = b.
Εμείς πάμε για να τον καθορισμό = 'Α' στην XOR από αυτά τα 2 πράγματα.
Έτσι 1 ^ 0 είναι 1? 1 ^ 1 είναι 0? 0 ^ 1 είναι 1, και 0 ^ 0 είναι 0? 1 ^ 0 είναι 1.
Έτσι, «ένα», αν κοιτάξετε το δεκαδικό αριθμό, πρόκειται να είναι -
δεν πρόκειται να δούμε πολλά από μια σχέση μεταξύ του αρχικού «Α» και το νέο «a»,
αλλά κοιτάζοντας τα bits, «a» είναι τώρα σαν ένα πλέγμα των πληροφοριών
τόσο της αρχικής «Α» και το αρχικό β.
Έτσι, αν λάβουμε ^ α β, βλέπουμε ότι θα καταλήξετε στο αρχικό «a».
Και αν πάρουμε το αρχικό «α» ^ το νέο «α,« βλέπουμε καταλήγουμε στο αρχικό β.
Έτσι (α ^ β) ^ β = του αρχικού «α».
Και (α ^ β) ^ α = β η αρχική.
Υπάρχει - ένας άλλος τρόπος για να δούμε αυτό είναι κάτι XOR η ίδια είναι πάντα 0.
Έτσι 1101 ^ 1101, όλα τα bits που πρόκειται να είναι το ίδιο.
Έτσι υπάρχει ποτέ δεν πρόκειται να είναι μια περίπτωση όπου το 1 είναι 0 και το άλλο είναι 1.
Έτσι, αυτό είναι 0000.
Το ίδιο με αυτό. (Α ^ β) ^ β είναι σαν ^ (β ^ β).
(Β ^ β) θα είναι 0? A ^ 0 είναι ακριβώς πρόκειται να είναι «ένα», αφού όλα τα κομμάτια είναι 0.
Έτσι, οι μόνοι που πρόκειται να είναι όπου «α» ήταν αρχικά ένα 1 - είχαν αυτά.
Και η ίδια η ιδέα εδώ? Είμαι απόλυτα βέβαιος ότι είναι επίσης αντιμεταθετική.
Ναι. Είχα πει πριν ότι ήταν ευμετάβλητη.
Το ^ 'α, και είναι συνειρμική, έτσι και τώρα (β ^ α) ^ α.
Και μπορούμε να το κάνουμε β ^ (α ^ α).
Και έτσι πάλι, έχουμε το αρχικό β.
Έτσι, «a» είναι τώρα ο συνδυασμός του «ενός» και β μαζί.
Χρησιμοποιώντας το νέο combo μας «α» λέμε β = combo 'α' ^ η αρχική β, παίρνουμε το αρχικό «a».
Και τώρα ένα σύνθετο = 'α' ^ το νέο b, που ήταν η αρχική - ή που είναι πλέον αυτό που ήταν «α» ή β.
Αυτό είναι η υπόθεση αυτή εδώ κάτω. Αυτό είναι = b, b παλιά.
Μέχρι τώρα όλα είναι πίσω στο αντάλλαξαν σειρά.
Αν θέλουμε πραγματικά κοίταξε τα κομμάτια, b = a ^ b, πρόκειται να XOR αυτά τα 2,
και η απάντηση θα είναι αυτό, και τότε a = a ^ b είναι XORing αυτά τα 2 και η απάντηση είναι αυτή.
Ερωτήσεις; Εντάξει. Έτσι, η τελευταία είναι κάπως πολύ πιο δύσκολη.
[Φοιτητικό] Νομίζω ότι έχει μια ερώτηση σχετικά με αυτό. >> Ω, συγγνώμη.
[Φοιτητικό] Τι είναι στην πραγματικότητα πιο γρήγορα; Εάν χρησιμοποιήσετε αυτήν XOR, ή είναι αν δηλώσετε μια νέα μεταβλητή;
Έτσι, ό, τι είναι στην πραγματικότητα πιο γρήγορα, με την οποία μια νέα μεταβλητή ή χρησιμοποιώντας XOR να ανταλλάξουν;
Η απάντηση είναι, κατά πάσα πιθανότητα, μια προσωρινή μεταβλητή.
Και αυτό οφείλεται στο γεγονός ότι τη στιγμή που θα καταρτίζονται κάτω - τόσο σε επίπεδο συναρμολόγησης,
δεν υπάρχει τέτοιο πράγμα όπως τοπικές μεταβλητές ή οποιεσδήποτε προσωρινές μεταβλητές ή σε οποιοδήποτε από αυτά τα πράγματα.
Θα ήθελα απλά - υπάρχει μνήμη, και υπάρχουν μητρώα.
Μητρώα είναι όπου τα πράγματα είναι ενεργά συμβαίνουν.
Δεν προσθέτουμε 2 πράγματα στη μνήμη? Προσθέτετε 2 πράγματα σε μητρώα.
Και να σας φέρει τα πράγματα από τη μνήμη σε μητρώα για να προσθέσει στη συνέχεια,
και στη συνέχεια μπορείτε να τα θέσουν εκ νέου σε μνήμη, αλλά όλη η δράση συμβαίνει σε μητρώα.
Έτσι, όταν χρησιμοποιείτε την προσωρινή μεταβλητή προσέγγιση, συνήθως αυτό που συμβαίνει είναι
αυτές οι 2 αριθμοί είναι ήδη σε μητρώα.
Και μετά από αυτό το σημείο και μετά, αφού έχετε τους αντάλλαξαν,
αυτό ακριβώς θα αρχίσουν να χρησιμοποιούν το άλλο καταχωρητή.
Οπουδήποτε και αν είχε τη χρήση β, αυτό θα χρησιμοποιήσετε μόνο το μητρώο που έχει ήδη την αποθήκευση «ένα».
Γι 'αυτό δεν χρειάζεται να κάνετε τίποτα για να κάνει πραγματικότητα το swap. Ναι;
[Φοιτητικό] Αλλά χρειάζεται επίσης περισσότερη μνήμη, έτσι δεν είναι;
Θα πάρει μόνο περισσότερη μνήμη αν χρειαστεί να αποθηκεύσετε ότι η προσωρινή μεταβλητή.
Όπως και αν χρησιμοποιείτε αργότερα ότι η προσωρινή μεταβλητή και πάλι κάπου,
τότε - ή να εκχωρήσετε κάτι σε αυτό προσωρινή μεταβλητή.
Έτσι, αν σε οποιαδήποτε χρονική στιγμή «α, β 'στη θερμοκρασία έχουν διαφορετικές τιμές ή κάτι,
τότε πρόκειται να έχουν διαφορετικές θέσεις στη μνήμη, αλλά είναι αλήθεια ότι
υπάρχουν πολλές τοπικές μεταβλητές που θα υπάρχουν μόνο στα μητρώα.
Σε αυτή την περίπτωση, δεν είναι ποτέ τεθεί σε μνήμη, και έτσι ποτέ δεν σπαταλάτε μνήμη.
Εντάξει. Τελευταία ερώτηση είναι λίγο περισσότερο.
Έτσι, εδώ, σε αυτή τη συσκευή CS50, υπάρχει ένα λεξικό.
Και ο λόγος για αυτό είναι επειδή [? Β66] είναι ένα ορθογραφικό έλεγχο, όπου θα σας γραπτώς
χρησιμοποιώντας πίνακες κατακερματισμού ή χώρες ή κάποια δομή δεδομένων.
Θα πάμε να γράφει ένα ορθογράφο, και θα πάμε να χρησιμοποιεί αυτό το λεξικό για να το κάνουμε αυτό.
Αλλά για το πρόβλημα αυτό, είμαστε ακριβώς πρόκειται να κοιτάζω προς τα πάνω για να δείτε εάν μια λέξη είναι στο λεξικό.
Έτσι, αντί να αποθηκεύει ολόκληρο το λεξικό σε κάποια δομή δεδομένων
και στη συνέχεια να αναζητούν πάνω από ένα ολόκληρο έγγραφο για να δούμε αν κάτι είναι ορθογραφικά λάθη,
θέλουμε απλώς να βρείτε 1 λέξη. Έτσι, μπορούμε απλά να σαρώσετε πάνω από ολόκληρο το λεξικό
και αν δεν βρούμε τη λέξη σε ολόκληρο το λεξικό, τότε δεν ήταν εκεί.
Αν σαρώσετε ολόκληρη λεξικό και βλέπω τη λέξη, τότε είμαστε καλοί, το βρήκαμε.
Εδώ λέει ότι θέλουμε να αρχίσετε να ψάχνετε σε αρχείο χειρισμού λειτουργίας Γ,
από τη στιγμή που θέλετε να διαβάσετε το λεξικό,
αλλά θα δώσω τον υπαινιγμό εδώ ως προς το ποια καθήκοντα θα πρέπει να σκεφτείτε.
Θα τα γράψω σε χώρους.
Έτσι, τα κυριότερα από τα οποία θα θελήσετε να εξετάσετε είναι στ ανοικτά και τότε, αναπόφευκτα, στ κλειστό,
που θα πάει στο τέλος του προγράμματός σας, και στ στ σάρωση.
Θα μπορούσατε επίσης να χρησιμοποιήσετε στ διαβάσει, αλλά ίσως δεν θέλουν να
επειδή αυτό - δεν καταλήγουν ότι χρειάζεται.
F σάρωση f είναι τι πρόκειται να χρησιμοποιείτε για να σαρώσετε πάνω από το λεξικό.
Και έτσι δεν χρειάζεται να κωδικοποιήσει τη λύση, απλώς προσπαθήστε και όπως ψευδο-κώδικα τον τρόπο σας
σε μια λύση, και τότε θα το συζητήσουμε.
Και στην πραγματικότητα, δεδομένου ότι έδωσα ήδη έχετε αυτά, αν πάτε σε οποιοδήποτε τερματικό ή κέλυφος της συσκευής σας,
Θα ήθελα - εγώ συνήθως - αν δεν το έχετε δει ακόμα, δεν ξέρω αν κάνατε στην τάξη,
αλλά ο άνθρωπος, έτσι ώστε οι σελίδες man, είναι αρκετά χρήσιμο για την εξέταση σχεδόν κάθε λειτουργία.
Έτσι, μπορώ να κάνω, όπως, στ άνθρωπος, σάρωση στ.
Αυτό είναι τώρα οι πληροφορίες για την οικογένεια στ σάρωση των λειτουργιών.
Θα μπορούσα να κάνω και στ άνθρωπος, ανοιχτή, και ότι θα μου δώσει τις λεπτομέρειες για αυτό.
Έτσι, αν γνωρίζετε ποια είναι η λειτουργία που χρησιμοποιείτε, ή διαβάζετε κώδικα
και θα δείτε κάποια λειτουργία και είστε όπως, «Τι σημαίνει αυτό κάνω;"
Απλά ο άνθρωπος που το όνομα της λειτουργίας.
Υπάρχουν μερικά παράξενα παραδείγματα όπου ίσως να πρέπει να πω
αρέσει. 2 ότι ο άνθρωπος όνομα της συνάρτησης, ή 3, ότι ο άνθρωπος όνομα της συνάρτησης,
αλλά το μόνο που πρέπει να κάνουμε ότι εάν το όνομα της λειτουργίας άνθρωπος δεν τυχαίνει να λειτουργήσει την πρώτη φορά.
[Φοιτητικό] Έτσι είμαι διαβάζοντας την σελίδα man για ανοιχτό, αλλά είμαι εξακολουθούν να έχουν συγκεχυμένη για το πώς να το χρησιμοποιήσετε και το πρόγραμμα.
Εντάξει. Πολλές από τις σελίδες άνθρωπος είναι λιγότερο από ό, τι χρήσιμο.
Είναι πιο χρήσιμο αν έχετε ήδη ξέρουν τι κάνουν
και στη συνέχεια το μόνο που χρειάζεται να θυμάστε τη σειρά των επιχειρημάτων ή κάτι τέτοιο.
Ή μπορεί να σας δώσει μια γενική εικόνα, αλλά μερικά από αυτά είναι πολύ συντριπτική.
Όπως f f σάρωσης, επίσης. Σας δίνει τις πληροφορίες για όλες αυτές τις λειτουργίες,
και 1 γραμμή προς τα κάτω εδώ συμβαίνει να πει, "F σάρωση στ διαβάζει από το σημείο string ή ρεύμα."
Αλλά στ ανοίξει. Έτσι, πώς θα χρησιμοποιήσουν στ ανοικτά;
Η ιδέα του προγράμματος που θα πρέπει να κάνει το αρχείο I / O είναι ότι
θα πρέπει πρώτα να ανοίξετε το αρχείο που θέλετε να κάνετε τα πράγματα με, και αναπόφευκτα,
διαβάσετε τα πράγματα από αυτό το αρχείο και να κάνουμε πράγματα μαζί τους.
F ανοικτό είναι αυτό που χρησιμοποιούμε για να ανοίξετε το αρχείο.
Το πράγμα θα πάρει πίσω, ναι, τι αρχείο θέλουμε να ανοίξει, μας δίνει το -
εδώ λέει "/ user / share / dict / λέξεις."
Αυτό είναι το αρχείο που θέλετε να ανοίξετε, και θέλουμε να το ανοίξετε -
θα πρέπει να αναφέρονται ρητώς αν θέλουμε να το ανοίξετε για να διαβάσετε ή αν θέλουμε να το ανοίξετε για να γράψει.
Υπάρχει ένα ζευγάρι των συνδυασμών και πράγματα, αλλά θέλουμε να ανοίξουμε αυτό για ανάγνωση.
Θέλουμε να διαβάσει από το αρχείο.
Έτσι, αυτό που κάνει αυτή η επιστροφή; Επιστρέφει ένα αρχείο αστέρι (*),
και θα σας δείξω ακριβώς τα πάντα στη μεταβλητή f, έτσι *,
πάλι, είναι ένας δείκτης, αλλά δεν θέλουμε να αντιμετωπίσουμε με δείκτες.
Μπορείτε να σκεφτείτε στ όπως, f είναι τώρα η μεταβλητή που πρόκειται να χρησιμοποιήσετε για να αναπαραστήσει το αρχείο.
Έτσι, εάν θέλετε να διαβάσετε από το αρχείο, μπορείτε να διαβάσετε από f.
Αν θέλετε να κλείσετε το αρχείο, θα κλείσει στ.
Έτσι, στο τέλος του προγράμματος, όταν αναπόφευκτα θέλετε να κλείσετε το αρχείο, τι πρέπει να κάνουμε;
Θέλουμε να κλείσει στ.
Έτσι τώρα η τελευταία λειτουργία αρχείου που θα πάμε να θέλετε να χρησιμοποιήσετε είναι η σάρωση στ, στ στ σάρωση.
Και τι κάνει είναι να ελέγχει πάνω από το αρχείο ψάχνει για ένα σχέδιο για να ταιριάζει.
Κοιτάζοντας τη σελίδα man εδώ, βλέπουμε int f f σάρωσης, αγνοούν την αξία επιστροφής για τώρα.
Το πρώτο επιχείρημα είναι το ρεύμα * αρχείο, έτσι ώστε το πρώτο επιχείρημα θα πάμε να θέλουν να περάσουν είναι στ.
Είμαστε σάρωση πάνω στ.
Το δεύτερο επιχείρημα είναι μια συμβολοσειρά μορφής.
Θα σας δώσω ένα string format αυτή τη στιγμή.
Νομίζω ότι τυχαίνει να πούμε, 127s \ n, πολλά από τα οποία είναι περιττά.
Η ιδέα του τι είναι συμβολοσειρά μορφής, είναι ότι μπορείτε να σκεφτείτε στ σάρωσης ως το αντίθετο του στ εκτύπωσης.
Έτσι, στ εκτύπωσης, στ εκτύπωσης που χρησιμοποιούν επίσης αυτό το είδος της παραμέτρου μορφής,
αλλά στην εκτύπωση στ αυτό που κάνουμε είναι - ας ρίξουμε μια ματιά σε ένα ισοδύναμο.
Έτσι εκτύπωση στ, και δεν υπάρχει στην πραγματικότητα και στ στ εκτύπωσης, όπου το πρώτο όρισμα θα είναι στ.
Όταν εκτυπώνετε στ, θα μπορούσαμε να πούμε κάτι σαν, "127s εκτύπωση \ n" και στη συνέχεια, αν περάσει αυτό κάποια σειρά,
πρόκειται να εκτυπώσετε αυτή τη σειρά και στη συνέχεια μια νέα γραμμή.
Τι σημαίνει 127, είμαι σίγουρος, αλλά ποτέ δεν έχω τον εαυτό μου περιορίζεται σε αυτό,
Δεν θα χρειάζεται καν να πω 127 »στο στ εκτύπωσης,
αλλά τι σημαίνει αυτό είναι τυπώσει τα πρώτα 127 χαρακτήρες.
Γι 'αυτό και είμαι σίγουρος ότι αυτή είναι η περίπτωση. Μπορείτε να το Google για αυτό.
Αλλά στην επόμενη είμαι σχεδόν θετικό σημαίνει αυτό.
Έτσι, αυτό είναι εκτυπώσει τις πρώτες 127 χαρακτήρες, που ακολουθείται από μία νέα γραμμή.
F σάρωση στ τώρα, αντί να ψάχνει σε μια μεταβλητή και την εκτύπωση,
πρόκειται να δούμε σε κάποια σειρά, και να αποθηκεύσετε το πρότυπο στη μεταβλητή.
Ας χρησιμοποιήσουμε πραγματικά στ σάρωση σε ένα διαφορετικό παράδειγμα.
Ας πούμε ότι είχαμε κάποια int, x = 4,
και θέλαμε να δημιουργήσουμε μια σειρά από - ήθελε να δημιουργήσει το string
που ήταν σαν, αυτό θα έρθει πολύ αργότερα,
κάτι που είναι ακριβώς όπως 4.jpg.
Έτσι, αυτό θα μπορούσε να είναι ένα πρόγραμμα όπου θα έχετε μετρητή ποσό,
Συνοψίζοντας την αντιμετώπιση i, και θέλετε να αποθηκεύσετε μια δέσμη των εικόνων.
Έτσι θέλετε να αποθηκεύσετε i.jpg, όπου θ είναι κάποια επανάληψη του βρόχου σας.
Επομένως, πώς θα κάνουν αυτή τη σειρά για το JPEG;
Αν θέλετε να εκτυπώσετε 4.jpg, θα μπορούσαμε να πούμε ακριβώς στ εκτύπωσης, d.jpg%,
και τότε θα εκτυπώσετε για το αρχείο JPEG.
Αλλά αν θέλουμε να σώσουμε την 4.jpg σειρά, χρησιμοποιούμε στ σάρωσης.
Έτσι string s - στην πραγματικότητα εμείς can't - χαρακτήρας, char s, πάμε 100.
Γι 'αυτό και δήλωσε μόνο κάποια σειρά από 100 χαρακτήρες,
και αυτό είναι που είμαστε αναπόφευκτα πρόκειται να αποθηκεύει ότι μέσα JPEG
Έτσι θα πάμε να χρησιμοποιούν σάρωση στ, και η μορφή, το πώς θα λέγαμε d.jpg%
για να εκτυπώσετε 4.jpg, η μορφή του αυτό πρόκειται να είναι d.jpg%.
Έτσι, η μορφή είναι d.jpg%, αυτό που θέλουμε να αντικαταστήσει με% d είναι x,
και τώρα θα πρέπει να αποθηκεύσετε αυτή τη συμβολοσειρά κάπου.
Και πού θα πάμε για να αποθηκεύσετε αυτή τη σειρά είναι στον πίνακα s.
Έτσι, μετά από αυτή τη γραμμή του κώδικα, s, αν εκτυπώσετε f, s% της μεταβλητής s,
πρόκειται να εκτυπώσετε 4.jpg.
Έτσι, στ σάρωση f είναι το ίδιο με σάρωση στ, εκτός από τώρα είναι που αναζητούν πάνω από αυτό το αρχείο
για το τι πρέπει να φυλάσσεται σε s.
Αυτό είναι ό, τι το τελευταίο επιχείρημα πρόκειται να είναι.
Θέλουμε να αποθηκεύσετε - "οικογένεια στ σάρωσης των λειτουργιών σάρωσης και στα δύο ανάλογα με τη μορφή, όπως προσπάθησε παρακάτω.
Εάν οποιαδήποτε αποθηκεύονται στα σημεία τοποθεσία μπορεί να επιστρέψει - "
Όχι, δεν θα μπορούσε να είναι καλή. Επιτρέψτε μου να σκεφτούμε για ένα δευτερόλεπτο.
Έτσι σάρωση f δεν - τι στο καλό είναι η λειτουργία που το κάνει αυτό;
Έτσι σάρωση f δεν πρόκειται να λάβει έναν ακέραιο και να κάνει dot jpg.
Είναι πρόκειται να [μουρμουρίζει].
Αποθήκευση int μεταβλητή int σε σειρά C.
Τι είναι αυτή η μεταβλητή, ή τι είναι αυτό που ονομάζεται λειτουργία;
Ναι. That's - ναι. Έτσι, αυτό που καθορίζει σε σας πριν ήταν s εκτύπωση στ,
που - που κάνει πολύ πιο λογικό, γιατί είπα ότι ήταν πολύ περισσότερο σαν στ εκτύπωσης.
Σάρωση f είναι ακόμα κάτι σαν στ εκτύπωσης, αλλά s στ εκτύπωσης πρόκειται να σαρώσετε πάνω
και να αντικαταστήσετε τις μεταβλητές και τώρα να το αποθηκεύσετε σε μια σειρά.
Αντί για την εκτύπωση, το αποθηκεύει σε μια σειρά.
Έτσι, αγνοούν ότι εντελώς. Μπορείτε να εξακολουθούν να πιστεύουν του προσδιοριστή μορφή που, όπως εκείνη του στ εκτύπωσης.
Έτσι τώρα, αν θέλαμε να κάνουμε το 4.jpg πράγμα, εμείς θα κάνουμε s f εκτύπωσης, από το x.
Έτσι, αυτό που στ σάρωση κάνει - τι ερώτησή σας πρόκειται να είναι;
[Φοιτητικό] Είμαι απλά σύγχυση σχετικά με το τι προσπαθούμε να κάνουμε εδώ
με το JPEG. Μπορείτε να εξηγήσετε ότι 1 φορά;
Έτσι, αυτό ήταν - είναι λιγότερο Σχετική να σάρωση στ στ τώρα? Ελπίζουμε, θα συνδέσει πίσω σε κάποιο είδος της τρόπο.
Αλλά ό, τι αρχικά είχε την πρόθεση να δείξει ήταν - αυτό είναι πραγματικά άμεση σχέση με αυτά τα [; F5]
Θα πάμε να χρησιμοποιούν s στ εκτύπωσης, όπου, για παράδειγμα έχουμε 100 εικόνες,
και θέλετε να διαβάσετε εικόνα 1.jpg, 2.jpg, 3.jpg.
Έτσι, προκειμένου να το κάνουμε αυτό, θα πρέπει να στ ανοικτά, και στη συνέχεια θα πρέπει να περάσει στη σειρά που θέλετε να ανοίξετε.
Γι 'αυτό και θα θέλετε να ανοίξετε 1.jpg? Προκειμένου να δημιουργηθεί το string που είναι 1.jpg,
στ εκτύπωσης κάνουμε s% του D.jpg--εμείς δεν κάνουμε για int i = 0.
θ <40, i + +.
Έτσι% s στ εκτύπωσης D.jpg του i.
Έτσι, μετά από αυτή τη γραμμή, τώρα η μεταβλητή ή η σειρά s πρόκειται να 1.jpg.
Ή, 0.jpg, 1.jpg, 2.jpg. Και έτσι μπορούμε να ανοίξουμε, με τη σειρά του, κάθε εικόνα για ανάγνωση.
Έτσι, αυτό είναι ό, τι s εκτύπωση στ κάνει. Βλέπετε τι s εκτύπωση στ κάνει τώρα;
[Φοιτητικό] Εντάξει, έτσι αυτό είναι που - δημιουργεί ένα string, something.jpg, και στη συνέχεια το αποθηκεύει.
Ναι. Δημιουργεί - αυτό είναι μια άλλη συμβολοσειρά μορφής, όπως ακριβώς και στ σάρωσης και εκτύπωσης στ,
όταν εισάγει όλα από τις μεταβλητές στο δεύτερο όρισμα, θα μπορούσε να είναι s σε αντίθεση με i.
Ίσως - Θέλω να πω, αυτή είναι η περίπτωση. Αλλά ό, τι η σειρά των επιχειρημάτων είναι.
Είναι πρόκειται να εισάγετε όλες τις μεταβλητές στη συμβολοσειρά μορφοποίησης
και στη συνέχεια να αποθηκεύσετε σε ρυθμιστικό μας? λέμε ότι ένα ρυθμιστικό, είναι όπου είμαστε αποθήκευση του string.
Γι 'αυτό και αποθήκευση μέσα από το s-σωστά μορφοποιημένο string,% d έχει αντικατασταθεί με 4.
[Φοιτητικό] Έτσι, αν το κάναμε αυτό, είναι η μεταβλητή f ακριβώς πρόκειται να ανατεθεί εκ νέου;
Ναι. Γι 'αυτό και θα πρέπει να κλείσει το πρωτότυπο στ πριν γίνει αυτό.
Αλλά - και στη συνέχεια, επίσης, αν δεν υπήρχαν μια στ ανοίξει εδώ, τότε θα πρέπει να πούμε -
Ναι. Αλλά θα ανοίξει εκατό διαφορετικά αρχεία.
[Φοιτητών], όμως, δεν θα είναι σε θέση να έχουν πρόσβαση ή - εντάξει.
Εντάξει. Έτσι σάρωση στ, στ στ σάρωσης, είναι το είδος της ίδιας ιδέας,
αλλά αντί, αντί για την αποθήκευση του σε μια σειρά, είναι περισσότερο σαν να είναι τώρα
πηγαίνει πέρα ​​από ένα τσίμπημα και μοτίβο που ταιριάζουν κατά της εν λόγω σειράς και την αποθήκευση των αποτελεσμάτων σε μεταβλητές.
Μπορείτε να χρησιμοποιήσετε σάρωση f για να αναλύσει πάνω από κάτι σαν 4.jpg, και να αποθηκεύσετε το ακέραιο 4 σε int x ποσό.
Αυτό είναι ό, τι μπορούμε να χρησιμοποιήσουμε για σάρωση στ.
F σάρωση στ πρόκειται να το κάνουμε αυτό στη γραμμή εντολών.
Είμαι πραγματικά πολύ σίγουρος ότι αυτό είναι ό, τι η βιβλιοθήκη CS50 κάνει.
Έτσι, όταν λέτε, "να πάρει int," είναι σάρωση f-σης πάνω - scan f είναι ο τρόπος για να πάρετε είσοδο του χρήστη.
F σάρωση στ πρόκειται να κάνει το ίδιο πράγμα, αλλά χρησιμοποιώντας ένα αρχείο για να σαρώσετε πάνω.
Μέχρι εδώ, είμαστε σάρωση πάνω από αυτό το αρχείο.
Το σχέδιο που προσπαθούμε να ταιριάζει είναι μερικά συμβολοσειρά που είναι 127 χαρακτήρες
ακολουθείται από μια νέα γραμμή
Έτσι, είμαι σίγουρος ότι θα μπορούσαμε ακόμη και να πω "ταιριάζει s," δεδομένου ότι στο λεξικό
τυχαίνει να έχουμε, είναι σίγουρο ότι δεν είναι λέξη τόσο πολύ,
και, επίσης, στ στ σάρωση, νομίζω, θα σταματήσει στη νέα γραμμή δεν έχει σημασία τι.
Αλλά θα περιλαμβάνει τη νέα γραμμή του αγώνα, και -
[Φοιτητικό] Αν δεν είχαμε συμπεριλάβει τη νέα γραμμή, δεν θα το βρείτε μέρη μιας λέξης;
Είναι - κάθε - κοιτάζοντας το λεξικό -
Έτσι, στο λεξικό, όλα αυτά είναι λόγια μας.
Κάθε ένα είναι σε μια νέα γραμμή.
Η σάρωση στ πρόκειται να πάρει αυτή τη λέξη.
Εάν δεν περιλαμβάνεται η νέα γραμμή, τότε είναι πιθανό ότι η επόμενη στ σάρωσης θα διαβάσει μόνο τη νέα γραμμή.
Όμως, συμπεριλαμβανομένων των νέων γραμμή τότε θα αγνοείται η νέα γραμμή.
Αλλά εμείς δεν πρόκειται ποτέ να πάρει μέρος μιας λέξης, αφού είμαστε πάντα διαβάζει μέχρι και μια νέα γραμμή, δεν το θέμα αυτό.
[Φοιτητικό] Αλλά τι εάν κάνετε αναζήτηση για τη λέξη "Cissa," όπως Cissa.
Θα διαπιστώσετε ότι και να πω ότι είναι ένας αγώνας;
Έτσι, εδώ είμαστε - θα διαβάζονται - αυτό είναι πραγματικά ένα καλό σημείο.
Ποτέ δεν χρησιμοποιείτε την τρέχουσα - η λέξη που ψάχνουμε είναι το πρώτο όρισμα της γραμμής εντολών.
Έτσι σειρά, λέξη = argv 1.
Έτσι, η σειρά που ψάχνουμε είναι argv 1.
Δεν ψάχνουμε για μια λέξη καθόλου στ σάρωση μας.
Τι κάναμε με σάρωση f παίρνει κάθε λέξη στο λεξικό,
και στη συνέχεια, τη στιγμή που έχουμε αυτή τη λέξη θα πάμε να χρησιμοποιήσετε strcmp να τους συγκρίνετε.
Εμείς πάμε για να συγκρίνουν το λόγο μας και αυτό που μόλις διάβασα μέσα
Έτσι, αναπόφευκτα, θα πάμε να καταλήξετε να κάνει ένα μάτσο σάρωσης fs
έως ότου είναι ακριβώς έτσι συμβαίνει ότι η σάρωση θα επιστρέψει στ -
θα επιστρέψει ένα, εφ 'όσον έχει προσαρμόσει μια νέα λέξη,
και θα επιστρέψει κάτι άλλο από τη στιγμή που απέτυχε να ταιριάζει με την λέξη.
Είμαστε ανάγνωση καθ 'όλη τη λεξικό, αποθήκευση γραμμή προς γραμμή κάθε λέξη στη μεταβλητή s.
Τότε είμαστε συγκρίνοντας λέξη με s, και αν η σύγκριση == 0,
strcmp συμβαίνει να φέρει 0 αν ένας αγώνας έγινε.
Έτσι, αν ήταν 0, τότε μπορούμε να τυπώσουμε στ, σε συνδυασμό,
ή λέξη στο λεξικό, ή όπως αλλιώς θέλετε να εκτυπώσετε στ.
Και τότε - δεν θέλουμε να κλείσει στ ξανά και ξανά.
Αυτό είναι το είδος των πράγμα που θέλουμε να κάνουμε, και δεν είμαστε απλά ψάχνουν για λέξη στο λεξικό.
Έτσι, θα μπορούσαμε να το κάνουμε αυτό, αν θέλαμε να κοιτάξουμε για το μοτίβο τους, Cissa, όπως είπατε πριν,
αν θέλαμε να κοιτάξουμε για το σχέδιο, τότε θα αποτύχει στην περίπτωση
γιατί αυτό δεν είναι στην πραγματικότητα μια λέξη, αλλά μία από τις λέξεις στο λεξικό συμβαίνει να έχουν ότι σε αυτήν.
Γι 'αυτό θα ταιριάζει με αυτή τη λέξη, αλλά αυτό το υποσύνολο της λέξης δεν είναι ίδια η λέξη.
Αλλά αυτό δεν είναι το πώς θα το χρησιμοποιείτε? Είμαστε ανάγνωση σε κάθε λέξη
και συγκρίνοντας τότε η λέξη που έχουμε με αυτή τη λέξη.
Έτσι είμαστε συγκρίνοντας πάντα γεμάτο λόγια.
Μπορώ να στείλετε τις λύσεις οριστικοποιηθεί αργότερα.
Αυτό είναι το είδος του σχεδόν τη σωστή απάντηση, νομίζω.
[Σχόλιο Φοιτητής, ακατάληπτο]
Αχ, δεν μπορώ να απαλλαγούμε από ότι πριν; Char s, υποθέτω είπαμε 127 - ξεχάσω τι είναι η μεγαλύτερη.
Θα το κάνουμε μόλις 128? Έτσι και τώρα s είναι αρκετά μεγάλο χρονικό διάστημα.
Δεν χρειάζεται να εκτυπώσετε κάτι.
Είμαστε, επίσης, πρόκειται να θέλουν να έχουν για να κλείσει το αρχείο μας, και ότι θα πρέπει να είναι σχετικά με τη σωστή απάντηση.
CS50.TV