1 00:00:00,000 --> 00:00:02,670 [Powered by Google Translate] Masalah Seksyen Set 2: Edisi Hacker 2 00:00:02,670 --> 00:00:04,910 Rob Bowden, Universiti Harvard 3 00:00:04,910 --> 00:00:07,410 Ini adalah CS50. CS50.TV 4 00:00:07,410 --> 00:00:15,770 Jadi, saya Rob. Saya kanan di Kirkland. Ini adalah tahun ketiga saya TFing CS50. 5 00:00:15,770 --> 00:00:22,220 Ia adalah kali pertama bahawa kita berubah dari seksyen gaya tradisional kuliah, 6 00:00:22,220 --> 00:00:25,610 di mana kita hanya jenis kajian apa yang berlaku di kuliah dan kemudian anda semua bertanya soalan, 7 00:00:25,610 --> 00:00:32,250 sekarang untuk yang lebih banyak berasaskan masalah, di mana kita menggunakan kawasan, dan - 8 00:00:32,250 --> 00:00:37,410 Oh, jadi idea untuk pergi ke pautan itu saya menghantar kepada anda dan kemudian anda akan di Angkasa saya. 9 00:00:37,410 --> 00:00:42,410 Adakah sesiapa yang tidak mempunyai komputer riba? Okay. 10 00:00:42,410 --> 00:00:47,050 Jadi kita akan menggunakan ini, dan kami akan melakukan masalah tinggal di seksyen 11 00:00:47,050 --> 00:00:50,740 dan membincangkan mereka dan memikirkan apa yang salah 12 00:00:50,740 --> 00:00:56,390 dan saya mungkin tarik sehingga beberapa kod anda, dan saya mungkin membincangkan idea-idea anda. 13 00:00:56,390 --> 00:01:02,140 Begitu juga sesiapa yang menghadapi kesukaran? 14 00:01:02,140 --> 00:01:07,000 Anda boleh berbual di sebelah, saya tidak tahu jika kita akan mempunyai sebab untuk itu. 15 00:01:07,000 --> 00:01:12,270 Kini, seperti supersection sebelumnya, jika anda berada di kelas itu, anda tahu apa itu kira-kira. 16 00:01:12,270 --> 00:01:19,200 Pada semua set P ada akan menjadi bahagian-bahagian ini. 17 00:01:19,200 --> 00:01:22,550 Jadi P set 2, spesifikasi, saya rasa anda melihat ia pada P-set 1 sudah. 18 00:01:22,550 --> 00:01:27,400 Tetapi kita boleh melihat P set 2 untuk apa yang kita akan akan lebih hari ini. 19 00:01:27,400 --> 00:01:29,460 Dan anda akan melihat seksyen soalan. 20 00:01:29,460 --> 00:01:37,530 Jadi ini akan menjadi dalam semua P-set; akan ada seksyen soalan. 21 00:01:37,530 --> 00:01:41,340 Setakat ini kita telah berkata, "Pertimbangkan ini peluang untuk mengamalkan." 22 00:01:41,340 --> 00:01:44,940 Anda tidak akan diminta untuk mengemukakan program ini. 23 00:01:44,940 --> 00:01:48,480 Idea ini adalah bahawa ini sepatutnya kepada jenis membantu anda memulakan dengan set masalah. 24 00:01:48,480 --> 00:01:53,220 Saya rasa pada edisi Hacker, banyak daripada mereka yang sepatutnya hanya menjadi baru, perkara-perkara yang menarik untuk belajar. 25 00:01:53,220 --> 00:01:58,590 Mereka mungkin tidak langsung digunakan untuk set masalah. 26 00:01:58,590 --> 00:02:01,810 Dan sekarang kita tidak mempunyai anda serahkan mereka, tetapi dalam teori, 27 00:02:01,810 --> 00:02:07,480 untuk set masalah kemudian, anda mungkin mengemukakan mereka, dan dengan itu anda boleh datang ke bahagian 28 00:02:07,480 --> 00:02:10,380 atau menonton seksyen untuk mendapatkan jawapan, atau anda hanya boleh mendapatkan mereka pada anda sendiri 29 00:02:10,380 --> 00:02:16,350 jika anda tidak merasa seperti menikmati kehadiran saya. 30 00:02:16,350 --> 00:02:21,010 Jadi - Saya rasa ini adalah yang pertama. 31 00:02:21,010 --> 00:02:29,280 Oh. Juga, bawah seksyen ini soalan kita juga telah anda bertanya soalan tentang seluar pendek. 32 00:02:29,280 --> 00:02:33,440 Jadi saya rasa, dalam teori, anda sepatutnya untuk menonton ini sebelum datang ke seksyen, 33 00:02:33,440 --> 00:02:38,550 tetapi ia adalah baik jika anda tidak lakukan, kita akan pergi ke atas mereka anyway. 34 00:02:38,550 --> 00:02:42,590 Jadi kita boleh mulakan dengan ini: "Bagaimana gelung sementara berbeza dari gelung do sementara? 35 00:02:42,590 --> 00:02:46,210 Bilakah kedua amat berguna? " 36 00:02:46,210 --> 00:02:49,390 Jadi sesiapa mempunyai apa-apa? 37 00:02:49,390 --> 00:02:52,730 [Pelajar] do-gelung while akan sentiasa melaksanakan sekurang-kurangnya sekali. 38 00:02:52,730 --> 00:03:02,950 Ya. Supaya perbezaan. Satu gelung sementara - I'll hanya melakukannya di sini - gelung while, kita mempunyai keadaan 39 00:03:02,950 --> 00:03:19,760 di sini, manakala do-sementara, anda tidak mempunyai keadaan yang sehingga kita sampai ke sini. 40 00:03:19,760 --> 00:03:24,130 Dan sebagainya, apabila program anda yang melaksanakan, dan ia mendapat gelung sementara, 41 00:03:24,130 --> 00:03:26,380 ia segera memeriksa jika keadaan ini adalah benar. 42 00:03:26,380 --> 00:03:30,710 Jika keadaan itu tidak benar, ia hanya akan melangkau lebih gelung sepenuhnya. 43 00:03:30,710 --> 00:03:34,390 Do-gelung while, sebagai program melaksanakan, ia menjadi kepada "melakukan." 44 00:03:34,390 --> 00:03:37,920 Tiada apa-apa yang berlaku pada ketika ini, hanya terus melaksanakan. 45 00:03:37,920 --> 00:03:42,690 Kemudian apabila ia mencecah "sementara," jika keadaan adalah benar, ia gelung akan kembali dan melakukannya sekali lagi 46 00:03:42,690 --> 00:03:46,730 dan lagi dan lagi sehingga keadaan tidak benar dan kemudian hanya jatuh melalui. 47 00:03:46,730 --> 00:03:50,600 Jadi, perbezaan, bahawa ini boleh melangkau hak dari awal lagi. 48 00:03:50,600 --> 00:03:56,770 Ini semestinya melaksanakan sekali dan kemudian boleh melaksanakan lebih banyak kali jika keadaan masih benar. 49 00:03:56,770 --> 00:04:03,720 Jadi gelung sementara hanya akan melakukannya sekali, atau - gelung sementara - kita mungkin tidak perlu untuk melakukannya pada semua, 50 00:04:03,720 --> 00:04:07,900 sejak secepat kita mendapatkannya, jika keadaan itu adalah palsu, kita hanya akan melangkau hak ke atas. 51 00:04:07,900 --> 00:04:11,770 Manakala do-gelung while, kita akan melaksanakan sekali, semestinya. 52 00:04:11,770 --> 00:04:14,560 Kemudian, apabila kita sampai kepada keadaan, kita memeriksa jika ia adalah benar atau palsu. 53 00:04:14,560 --> 00:04:19,790 Jika ia benar, kita akan lakukan sekali lagi, jika ia adalah palsu, kita hanya akan terus pergi. 54 00:04:19,790 --> 00:04:24,680 Jadi apabila kedua amat berguna? 55 00:04:24,680 --> 00:04:31,190 Jadi, saya boleh mengatakan bahawa secara keseluruhan 4 tahun, 3 tahun, apa jua, 56 00:04:31,190 --> 00:04:38,780 bahawa saya telah pengaturcaraan, saya telah menggunakan ini, seperti, di bawah 10 kali. 57 00:04:38,780 --> 00:04:43,140 Dan mungkin 5 daripada mereka adalah di CS50 apabila kita memperkenalkan gelung do-sementara. 58 00:04:43,140 --> 00:04:47,510 Jadi apabila anda digunakan lakukan sementara gelung? 59 00:04:47,510 --> 00:04:49,510 Bilakah - ya? 60 00:04:49,510 --> 00:04:53,180 [Pelajar] Apabila anda cuba untuk mendapatkan input pengguna, atau sesuatu yang anda mahu untuk memeriksa - 61 00:04:53,180 --> 00:04:59,700 Yeah. Jadi lakukan sementara gelung, input pengguna adalah satu besar. 62 00:04:59,700 --> 00:05:03,160 Itulah sebabnya pada masalah pertama set pasangan, apabila anda mahu untuk meminta pengguna, seperti, 63 00:05:03,160 --> 00:05:08,520 "Memberi saya rentetan," anda tidak boleh terus sehingga anda mendapat bahawa rentetan. 64 00:05:08,520 --> 00:05:12,980 Dan sebagainya anda, semestinya, perlu untuk meminta tali sekurang-kurangnya sekali. 65 00:05:12,980 --> 00:05:16,950 Tetapi kemudian jika mereka menjawab sesuatu yang buruk, maka anda perlu untuk gelung balik dan bertanya lagi. 66 00:05:16,950 --> 00:05:20,810 Tetapi selain daripada input pengguna, ia amat jarang berlaku bahawa saya menghadapi kes 67 00:05:20,810 --> 00:05:27,170 mana saya mahu gelung "sekurang-kurangnya sekali" tetapi mungkin lebih. 68 00:05:27,170 --> 00:05:33,370 Soalan atau? Adakah sesiapa yang digunakan do-gelung while mana-mana sahaja? 69 00:05:33,370 --> 00:05:36,780 Okay. Jadi yang seterusnya adalah, "Apakah tidak diisytiharkan pengecam 70 00:05:36,780 --> 00:05:43,310 biasanya menunjukkan jika outputted oleh dilafaz? " 71 00:05:43,310 --> 00:05:47,380 Jadi apa jenis kod yang saya boleh menulis untuk mendapatkan 'pengecam tidak diisytiharkan?' 72 00:05:47,380 --> 00:05:49,550 [Pelajar] Itu x = 2? 73 00:05:49,550 --> 00:05:52,650 Jadi kita hanya boleh cuba di sini, x = 2. 74 00:05:52,650 --> 00:06:04,830 Kami akan menjalankan ini - oh, saya tidak klik. Jadi di sini kita mendapat hak semua. 75 00:06:04,830 --> 00:06:07,100 "Gunakan x pengecam yang tidak diisytiharkan." 76 00:06:07,100 --> 00:06:11,610 Jadi itulah pengecam tidak diisytiharkan, pembolehubah. 77 00:06:11,610 --> 00:06:13,910 Ia kerap akan memanggil pengecam pembolehubah. 78 00:06:13,910 --> 00:06:17,300 Jadi ia mungkin tidak tahu ia sebenarnya pembolehubah, ia tidak tahu apa itu. 79 00:06:17,300 --> 00:06:19,380 Jadi ia adalah pengecam. 80 00:06:19,380 --> 00:06:26,060 Jadi mengapa ia tidak diisytiharkan? Yeah. 81 00:06:26,060 --> 00:06:32,190 Jadi untuk menjadi jelas tentang istilah, pengisytiharan pembolehubah 82 00:06:32,190 --> 00:06:37,360 adalah apabila anda mengatakan "int x," atau "tali y," apa-apa. 83 00:06:37,360 --> 00:06:41,910 Pengawalan pembolehubah, atau tugasan pembolehubah, 84 00:06:41,910 --> 00:06:44,510 apabila anda mengatakan "x = 2." 85 00:06:44,510 --> 00:06:52,950 Jadi, kita boleh melakukan ini dalam langkah-langkah yang berasingan, int x, x = 2, dan sehingga kita boleh mempunyai sekumpulan barangan di sini - 86 00:06:52,950 --> 00:07:00,350 tetapi sehingga garisan ini berlaku, x masih tidak diisytiharkan, tetapi ia telah diisytiharkan. 87 00:07:00,350 --> 00:07:06,760 Dan supaya kita jelas boleh melakukannya di baris 1, dan sekarang kita sedang mengisytiharkan dan Memulakan. 88 00:07:06,760 --> 00:07:10,730 Soalan? 89 00:07:10,730 --> 00:07:18,390 Dan akhirnya, "Mengapa adalah Caesar Cipher tidak sangat selamat?" 90 00:07:18,390 --> 00:07:23,830 Jadi pertama, adakah sesiapa yang mahu untuk mengatakan apa Cipher Caesar? 91 00:07:23,830 --> 00:07:28,100 [Pelajar] Caesar Cipher hanya adalah bahawa anda memetakan, anda beralih setiap huruf, 92 00:07:28,100 --> 00:07:34,420 beberapa huruf tertentu pergi ke atas, dan bergerak kembali ke atas, dan ia tidak sangat selamat kerana 93 00:07:34,420 --> 00:07:42,260 terdapat hanya 26 pilihan yang mungkin dan anda hanya perlu mencuba setiap 1 daripada mereka sehingga anda mendapatkan ia. 94 00:07:42,260 --> 00:07:45,470 Oh. Jadi, saya perlu mengulangi? 95 00:07:45,470 --> 00:07:51,600 Cipher Caesar, it's - Maksud saya, anda akan berurusan dengan ia pada masalah yang anda - 96 00:07:51,600 --> 00:07:56,110 atau saya rasa edisi standard set masalah yang tidak pada edisi penggodam. 97 00:07:56,110 --> 00:08:01,550 Jadi pada edisi standard set masalah, anda akan mendapat mesej seperti, "Hello dunia,," 98 00:08:01,550 --> 00:08:08,410 dan anda juga mempunyai beberapa seperti 6, dan anda mengambil mesej itu, dan setiap watak individu, 99 00:08:08,410 --> 00:08:11,310 anda memutarkan ia dengan 6 jawatan dalam abjad. 100 00:08:11,310 --> 00:08:16,560 Jadi 'h' hello akan menjadi h-i-j-k-l-m-n. 101 00:08:16,560 --> 00:08:19,600 Jadi surat pertama akan n. Kami melakukan perkara yang sama dengan e. 102 00:08:19,600 --> 00:08:23,530 Jika kita mempunyai, seperti, z atau sesuatu, maka kita membalut kembali sekitar '.' 103 00:08:23,530 --> 00:08:29,280 Tetapi setiap aksara mendapat dikitar 6 aksara kemudian dalam abjad, dan ia tidak sangat selamat 104 00:08:29,280 --> 00:08:35,440 kerana terdapat hanya 26 kemungkinan untuk berapa banyak cara anda boleh balut surat tunggal. 105 00:08:35,440 --> 00:08:42,919 Jadi, anda hanya boleh cuba semua 26 daripada mereka dan, mungkin, untuk mesej yang cukup panjang, 106 00:08:42,919 --> 00:08:46,860 hanya 1 daripada mereka yang 26 perkara yang mungkin akan menjadi mudah dibaca, 107 00:08:46,860 --> 00:08:50,300 dan satu mudah dibaca akan menjadi mesej asal. 108 00:08:50,300 --> 00:08:56,240 Jadi ia bukan cara yang sangat baik menyulitkan apa-apa pada semua. 109 00:08:56,240 --> 00:08:59,070 Tidak berkaitan kepada mereka seluar pendek, "Apakah fungsi?" 110 00:08:59,070 --> 00:09:03,370 Jadi apa fungsi? Ya. 111 00:09:03,370 --> 00:09:11,640 [Pelajar] Ia adalah seperti sekeping berasingan kod yang boleh anda panggil untuk pergi melalui dan kemudian mendapatkan nilai pulangan apa sahaja. 112 00:09:11,640 --> 00:09:18,160 Yeah. Jadi saya akan menjawab dengan juga menjawab seterusnya atau berulang juga hanya menjawab satu depan. 113 00:09:18,160 --> 00:09:22,410 Anda boleh menggunakan fungsi-fungsi dan bukannya hanya menyalin dan menampal kod lebih dan lebih lagi. 114 00:09:22,410 --> 00:09:27,200 Hanya mengambil kod itu, meletakkan ia ke dalam satu fuction, dan kemudian anda hanya boleh memanggil fungsi 115 00:09:27,200 --> 00:09:29,870 di mana anda telah menyalin dan menampal. 116 00:09:29,870 --> 00:09:33,350 Jadi fungsi berguna. 117 00:09:33,350 --> 00:09:35,860 Jadi sekarang kita akan melakukan masalah sebenar. 118 00:09:35,860 --> 00:09:46,490 Yang pertama. Jadi idea yang pertama, anda lulus rentetan, dan tanpa mengira - 119 00:09:46,490 --> 00:09:52,060 atau adakah ia mengatakan semua huruf kecil? Ia tidak mengatakan semua huruf kecil. 120 00:09:52,060 --> 00:09:57,730 Jadi mesej boleh menjadi apa-apa, dan - oh tidak. Ia tidak. 121 00:09:57,730 --> 00:10:01,610 "Untuk memudahkan, anda boleh mengandaikan bahawa pengguna hanya akan input huruf kecil dan ruang." 122 00:10:01,610 --> 00:10:08,180 Jadi kita lulus mesej dengan hanya huruf kecil dan kemudian kita ganti 123 00:10:08,180 --> 00:10:15,450 antara modal dan huruf kecil - kita menukar tali untuk menjadi modal dan huruf kecil, seli. 124 00:10:15,450 --> 00:10:22,920 Jadi, sebelum kita memberi anda kedua untuk menyelam ke dalam masalah ini, 125 00:10:22,920 --> 00:10:32,420 apakah perkara pertama yang perlu kita lakukan? 126 00:10:32,420 --> 00:10:36,900 Oh, apa yang tidak saya hanya klik? Oh, saya hanya klik pada e-mel di sini. 127 00:10:36,900 --> 00:10:42,870 Jadi perkara pertama yang perlu kita lakukan - saya mencari di salah? 128 00:10:42,870 --> 00:10:49,320 Adakah ini sebahagian daripada yang satu ini? 129 00:10:49,320 --> 00:10:51,320 Tidak, mereka masih di sana, walaupun. 130 00:10:51,320 --> 00:10:55,160 Okay, masih di sini. 131 00:10:55,160 --> 00:11:03,160 Sekarang kita tidak boleh mengandaikan -? Ya. Di sini kita tidak boleh menganggap bahawa ia hanya huruf kecil dan ruang. 132 00:11:03,160 --> 00:11:07,770 Jadi sekarang kita perlu berurusan dengan fakta bahawa surat boleh menjadi apa sahaja yang kita mahu mereka menjadi. 133 00:11:07,770 --> 00:11:11,910 Dan supaya perkara pertama yang kita mahu lakukan hanya mendapat mesej. 134 00:11:11,910 --> 00:11:19,790 Kita hanya perlu untuk mendapatkan rentetan, rentetan s = GetString, okay. 135 00:11:19,790 --> 00:11:24,890 Sekarang masalah ini, terdapat beberapa cara melakukannya. 136 00:11:24,890 --> 00:11:29,840 Tetapi kita akan mahu untuk menggunakan pengendali bitwise di sini. 137 00:11:29,840 --> 00:11:35,280 Adakah terdapat orang-orang yang sama ada tidak berada di supersection, 138 00:11:35,280 --> 00:11:37,480 atau sesuatu, dan tidak tahu apa operator bitwise adalah? 139 00:11:37,480 --> 00:11:41,710 Atau bagaimana ia berkaitan dengan ASCII dalam apa jua cara? 140 00:11:41,710 --> 00:11:45,650 [Pelajar] Saya tidak berada di supersection, tetapi saya tahu apa operator bitwise adalah. 141 00:11:45,650 --> 00:11:49,560 Okay. Jadi maka saya tidak perlu pergi ke atas asas-asas mereka, tetapi saya akan terangkan 142 00:11:49,560 --> 00:11:51,830 apa yang kita akan mahu menggunakan di sini. 143 00:11:51,830 --> 00:11:59,680 Jadi 'A': binari perwakilan modal A, nombor ialah 65. 144 00:11:59,680 --> 00:12:07,560 Saya hanya akan melihat - 41 akan menjadi 01000001. 145 00:12:07,560 --> 00:12:14,170 Jadi yang perlu 65 dalam perpuluhan, jadi ini adalah perwakilan perduaan watak modal A. 146 00:12:14,170 --> 00:12:19,440 Sekarang, perwakilan binari watak huruf kecil 'a' 147 00:12:19,440 --> 00:12:33,350 akan menjadi perkara yang sama, hampir. Adakah itu - 6, yeah. Ini adalah betul. 148 00:12:33,350 --> 00:12:37,670 Modal Jadi perduaan A huruf kecil, binari '.' 149 00:12:37,670 --> 00:12:43,940 Jadi melihat bahawa perbezaan antara A dan 'a' ini sedikit tunggal. 150 00:12:43,940 --> 00:12:49,440 Dan ini berlaku untuk menjadi 32 bit, bit yang mewakili bilangan 32. 151 00:12:49,440 --> 00:12:53,910 Dan yang masuk akal kerana A adalah 65; 'a' adalah 97. 152 00:12:53,910 --> 00:12:56,610 Perbezaan antara mereka ialah 32. 153 00:12:56,610 --> 00:13:03,770 Jadi sekarang kita tahu kita boleh menukar dari A ke 'a' dengan mengambil A 154 00:13:03,770 --> 00:13:09,710 dan bitwise ORing, dengan - yang kelihatan seperti 1. 155 00:13:09,710 --> 00:13:20,900 Ini adalah bitwise OR, dengan 00100000, dan yang akan memberi kita '.' 156 00:13:20,900 --> 00:13:26,850 Dan kita boleh mendapat dari 'a' kepada A oleh bitwise Anding 157 00:13:26,850 --> 00:13:33,700 dengan 11, 0 di tempat itu, 11111. 158 00:13:33,700 --> 00:13:43,840 Jadi ini akan memberikan kita apa yang 'a'; tetapi membatalkan keluar ini sedikit individu, 159 00:13:43,840 --> 00:13:50,070 jadi kita akan mempunyai 01000001, saya tidak tahu jika saya dikira betul. 160 00:13:50,070 --> 00:13:56,750 Tetapi teknik ini bitwise ORing untuk mendapatkan modal untuk huruf kecil, 161 00:13:56,750 --> 00:14:02,080 dan bitwise Anding untuk mendapatkan dari huruf kecil kepada modal tidak eksklusif kepada A. 162 00:14:02,080 --> 00:14:06,510 Semua huruf, K vs k, Z vs z, 163 00:14:06,510 --> 00:14:10,080 mereka semua hanya akan berbeza oleh sedikit tunggal ini. 164 00:14:10,080 --> 00:14:16,290 Dan supaya anda boleh menggunakan ini untuk berubah dari mana-mana surat kecil untuk surat mana-mana modal dan sebaliknya. 165 00:14:16,290 --> 00:14:26,670 Okay. Jadi cara yang mudah untuk mendapatkan daripada ini - jadi bukannya perlu 166 00:14:26,670 --> 00:14:32,170 menulis apa jua 1011111 - cara mudah mewakili nombor ini, dan ini bukanlah satu 167 00:14:32,170 --> 00:14:39,710 bahawa saya pergi ke dalam supersection, tetapi tilde (~) merupakan satu lagi pengendali bitwise. 168 00:14:39,710 --> 00:14:42,520 Apa yang ~ tidak adalah ia melihat perwakilan bit. 169 00:14:42,520 --> 00:14:45,630 Mari kita mengambil sebarang nombor. 170 00:14:45,630 --> 00:14:53,130 Ini adalah hanya beberapa nombor perduaan, dan apa ~ tidak ia hanya lambungan semua bit. 171 00:14:53,130 --> 00:15:00,630 Jadi ini adalah 1, kini 0 a, ini adalah 0, sekarang 1, 010100. 172 00:15:00,630 --> 00:15:08,320 Jadi yang ~ semua tidak. Jadi 32 akan menjadi nombor - menghilangkan itu - 173 00:15:08,320 --> 00:15:23,320 jadi 32 akan menjadi nombor 00100000, dan sebagainya ~ ini akan menjadi 174 00:15:23,320 --> 00:15:29,980 nombor ini di sini bahawa saya ANDkan 'a' dengan. 175 00:15:29,980 --> 00:15:35,600 Adakah semua orang melihat bahawa? Ini adalah agak biasa, seperti apabila anda mahu untuk memikirkan 176 00:15:35,600 --> 00:15:40,740 untuk perkara-perkara kemudian yang kita mungkin akan melihat, apabila kita mahu melihat jika - 177 00:15:40,740 --> 00:15:44,710 atau kita mahu segala-galanya, setiap set bit tunggal kecuali untuk 1 178 00:15:44,710 --> 00:15:47,910 anda cenderung untuk lakukan ~ sedikit bahawa kita tidak mahu menetapkan. 179 00:15:47,910 --> 00:15:53,090 Jadi kita tidak mahu 32 set sedikit, jadi kita ~ 32 tahun. 180 00:15:53,090 --> 00:15:57,790 Okay. Jadi, kita boleh menggunakan semua daripada mereka di sini. 181 00:15:57,790 --> 00:16:03,000 Baiklah, jadi ia adalah baik jika anda tidak dilakukan, kita perlahan-lahan akan berjalan di atas bersama-sama, 182 00:16:03,000 --> 00:16:11,870 atau berjalan di atas ini, jadi melalui ini. Berjalan melalui ini. 183 00:16:11,870 --> 00:16:20,790 Jadi kita mempunyai rentetan kami, dan kami mahu gelung atas setiap aksara dalam rentetan itu dan melakukan sesuatu untuk. 184 00:16:20,790 --> 00:16:26,710 Jadi bagaimana kita gelung atas rentetan? Apa yang harus kita gunakan? 185 00:16:26,710 --> 00:16:30,980 Saya tidak akan melakukannya di sini. Yeah. 186 00:16:30,980 --> 00:16:42,940 Jadi saya mempunyai iterator saya, dan dia berkata ia, tetapi bagaimana saya tahu berapa banyak aksara dalam rentetan? 187 00:16:42,940 --> 00:16:47,030 Strlen (s), maka i + +. 188 00:16:47,030 --> 00:16:49,860 Jadi apa yang saya lakukan di sini bukan cara terbaik untuk melakukan sesuatu. 189 00:16:49,860 --> 00:16:51,860 Adakah sesiapa yang tahu mengapa? 190 00:16:51,860 --> 00:16:55,290 Kerana anda memeriksa bahasa rentetan setiap kali tunggal. 191 00:16:55,290 --> 00:17:06,859 Jadi kita akan mahu bergerak strlen, saya boleh katakan di sini, int panjang = strlen (s), 192 00:17:06,859 --> 00:17:11,900 dan kemudian i 00:17:20,410 Saya juga boleh melakukan int i = 0, panjang = strlen (s). 194 00:17:20,410 --> 00:17:25,010 Dan jadi ini adalah agak lebih baik, kerana sekarang saya telah menghadkan skop 195 00:17:25,010 --> 00:17:29,150 panjang pembolehubah hanya ini 'for', bukannya mengisytiharkan sebelum 196 00:17:29,150 --> 00:17:34,990 dan bahawa ia sentiasa wujud, dan jika anda tidak menangkap mengapa yang buruk, 197 00:17:34,990 --> 00:17:39,410 atau mengapa asal adalah buruk, it's - bermula pada gelung. 198 00:17:39,410 --> 00:17:43,380 Saya memeriksa keadaan. Adakah I 00:17:46,790 Jadi panjang s, mari kita bekerja dengan "hello" seluruh masa. 200 00:17:46,790 --> 00:17:49,670 Jadi panjang s, h-e-l-l-o. Panjang ialah 5. 201 00:17:49,670 --> 00:17:57,580 Jadi saya = 0, panjang 5, jadi saya tidak <5, maka gelung berterusan. 202 00:17:57,580 --> 00:18:02,750 Kemudian kita pergi lagi. Kami memeriksa keadaan. Adakah I 00:18:08,390 Jadi mari kita memeriksa panjang hello. H-e-l-l-o. Itulah 5; i tidak <5, jadi kita terus lagi. 204 00:18:08,390 --> 00:18:13,330 Jadi kita mengira, kita mengira hello, bagi setiap lelaran gelung, 205 00:18:13,330 --> 00:18:17,380 walaupun ia tidak akan berubah, ia sentiasa akan menjadi 5. 206 00:18:17,380 --> 00:18:22,530 Jadi kita hanya ingat 5 di depan, dan kini segala-galanya adalah lebih baik. 207 00:18:22,530 --> 00:18:24,990 Jadi iterating seluruh rentetan. 208 00:18:24,990 --> 00:18:31,470 Apa yang kita mahu lakukan untuk watak setiap rentetan? 209 00:18:31,470 --> 00:18:38,510 [Pengucapan Pelajar, tidak bijaksana yang] 210 00:18:38,510 --> 00:18:47,000 Yeah. Jadi, jika watak bukan abjad, maka kita hanya mahu melangkau ke atasnya. 211 00:18:47,000 --> 00:18:52,300 Kerana kita hanya mengambil berat tentang huruf abjad, kita tidak boleh mengambil kesempatan nombor. 212 00:18:52,300 --> 00:19:10,850 Jadi bagaimana kita boleh melakukan ini? Jadi keadaan kami, jadi jika kita mahu sesuatu - memeriksa jika ia adalah abjad. 213 00:19:10,850 --> 00:19:14,060 Jadi bagaimana kita memeriksa ini? 214 00:19:14,060 --> 00:19:18,720 [Pelajar] Anda hanya boleh menggunakan fungsi adalah alfa. 215 00:19:18,720 --> 00:19:23,160 Adakah yang dimasukkan ke dalam sama ada ini, atau mana-mana termasuk seperti, char.h atau sesuatu? 216 00:19:23,160 --> 00:19:32,710 Mari kita tidak menggunakan fungsi alfa, dan menggunakan yang jelas - jadi kita mempunyai s [i], 217 00:19:32,710 --> 00:19:40,460 yang adalah watak kelapan s, ingat bahawa rentetan adalah pelbagai watak, 218 00:19:40,460 --> 00:19:43,180 jadi watak kelapan s. 219 00:19:43,180 --> 00:19:49,280 Sekarang, jika ia adalah surat modal, kita tahu ia telah berada di dalam julat tertentu. 220 00:19:49,280 --> 00:19:54,370 Dan apa yang pelbagai yang? 221 00:19:54,370 --> 00:20:07,860 Yeah. Jadi, jika s [i] adalah ≥ 65, dan s [i] adalah ≤ 90, apa yang perlu saya lakukan sebaliknya? 222 00:20:07,860 --> 00:20:18,470 Yeah. Jadi, anda perlu benar-benar tidak pernah perlu tahu nilai ASCII dengan apa-apa jua yang pernah. 223 00:20:18,470 --> 00:20:25,640 Jangan sekali-kali berfikir 65 nombor, 90, 97 dan 102, atau apa sahaja ia adalah. 224 00:20:25,640 --> 00:20:32,470 Anda tidak perlu - 112 - anda tidak perlu tahu mereka pada semua. Itulah salah juga. 225 00:20:32,470 --> 00:20:41,940 Hanya gunakan aksara tunggal quote, pemalar quote tunggal. Jadi 'A' dan kurang daripada 90 adalah 'Z.' 226 00:20:41,940 --> 00:20:47,930 Dan ini adalah jauh lebih baik - saya tidak akan tahu dari bahagian atas kepala saya bahawa Z ialah 90. 227 00:20:47,930 --> 00:20:52,690 Saya tahu dari bahagian atas kepala saya bahawa 'Z' adalah modal Z. 228 00:20:52,690 --> 00:21:02,100 Jadi selagi ini adalah dalam lingkungan modal A modal Z, atau kita boleh menyemak untuk huruf kecil, 229 00:21:02,100 --> 00:21:17,010 Atau jika ia adalah dalam julat ≥ 'a' dan ≤ z. 230 00:21:17,010 --> 00:21:19,010 Jadi itulah keadaan kita. 231 00:21:19,010 --> 00:21:22,520 Gaya untuk di mana untuk meletakkan perkara-perkara ini berbeza. 232 00:21:22,520 --> 00:21:29,520 Saya akan buat seperti ini. 233 00:21:29,520 --> 00:21:31,520 Kini, apa yang kita mahu lakukan? 234 00:21:31,520 --> 00:21:39,530 Kita tahu surat ini adalah watak, watak abjad. 235 00:21:39,530 --> 00:21:46,270 Jadi kita perlu ganti antara sama ada ini kini harus huruf besar atau huruf kecil. 236 00:21:46,270 --> 00:21:48,820 Bagaimana kita menyimpan trek yang mana satu kita mahu ia menjadi? 237 00:21:48,820 --> 00:21:55,520 [Pelajar suara, difahami] 238 00:21:55,520 --> 00:21:59,150 Jadi ya, tetapi biarlah saya periksa. 239 00:21:59,150 --> 00:22:04,910 Modul 0-2 telah berkata, adalah satu cadangan yang tercampak keluar, dan saya bersetuju dengan itu. 240 00:22:04,910 --> 00:22:11,780 Kecuali notis bahawa, seperti kes ini? Yeah. 241 00:22:11,780 --> 00:22:18,270 Ia adalah setiap satu yang lain, tetapi kita tidak boleh modul 2 i, atau i arena 2, sejak 242 00:22:18,270 --> 00:22:22,950 melihat bahawa E adalah modal dan 'a' adalah huruf kecil? Tetapi ada ruang yang memisahkan mereka? 243 00:22:22,950 --> 00:22:27,150 Jadi mereka pergi untuk menjadi arena yang sama 2, tetapi mereka kes-kes yang berbeza. 244 00:22:27,150 --> 00:22:29,150 [Pelajar soalan, difahami] 245 00:22:29,150 --> 00:22:34,690 Yeah. Jadi kita hanya akan menyimpan kiraan. 246 00:22:34,690 --> 00:22:38,730 Kita juga boleh berbuat demikian di sini jika kita mahu; yang mungkin mendapatkan sedikit dikawal 247 00:22:38,730 --> 00:22:41,300 dalam untuk pengisytiharan gelung; saya akan meletakkan ia di sini. 248 00:22:41,300 --> 00:22:48,840 Jadi kiraan int = bermula pada 0. 249 00:22:48,840 --> 00:22:54,070 Dan jadi sekarang, saya akan mengira berapa banyak aksara abjad kita telah. 250 00:22:54,070 --> 00:22:59,550 Jadi kita tidak dapat dielakkan akan mengira + + kerana kita mendapati aksara huruf lain. 251 00:22:59,550 --> 00:23:09,130 Tetapi, jadi sekarang anda mengatakan jika arena kiraan 2. 252 00:23:09,130 --> 00:23:12,590 Jadi apa jika kiraan arena 2? Oh. Saya akan lakukan == 0 buat masa sekarang. 253 00:23:12,590 --> 00:23:21,740 Kami juga akan pergi ke bahawa. Jadi jika arena kiraan 2 == 0, kemudian apa? 254 00:23:21,740 --> 00:23:27,830 [Pelajar jawapan, difahami] 255 00:23:27,830 --> 00:23:32,750 Jadi kita mahu ia berakhir dengan huruf besar. 256 00:23:32,750 --> 00:23:37,520 Terdapat 2 kes; huruf besar dan huruf kecil adalah 2 kes. 257 00:23:37,520 --> 00:23:40,990 Jadi, jika kita berada dalam huruf kecil kita perlu untuk membuat huruf besar. 258 00:23:40,990 --> 00:23:43,710 Jika ia adalah huruf besar kita tidak perlu berbuat apa-apa. 259 00:23:43,710 --> 00:23:50,760 Tetapi, terdapat satu cara - shouldn't telah dibalik - 260 00:23:50,760 --> 00:23:54,800 bahawa kita tidak perlu untuk memeriksa sama ada ia besar atau huruf kecil? 261 00:23:54,800 --> 00:24:02,240 Apa yang kita boleh lakukan untuk sentiasa memastikan bahawa kita sentiasa berakhir pada huruf besar? 262 00:24:02,240 --> 00:24:07,830 Jadi melihat apa yang kita lakukan untuk huruf kecil 'a', bagaimana jika kita lakukan perkara ini tepat yang sama kepada huruf besar A? 263 00:24:07,830 --> 00:24:11,900 Adakah huruf besar perubahan, atau adakah perubahan nilai? 264 00:24:11,900 --> 00:24:23,100 Yeah. Jadi mana-mana huruf bitwise ANDkan dengan ~ 32 akan menjadi bahawa sifat huruf yang sama 265 00:24:23,100 --> 00:24:29,220 kerana bagi apa-apa sifat huruf besar sedikit 32 tidak ditetapkan. 266 00:24:29,220 --> 00:24:40,920 Jadi, jika kita mahu membawa watak [i], kita mahu ia menjadi huruf kecil atau huruf besar. 267 00:24:40,920 --> 00:24:46,890 Jadi, jika ia adalah huruf kecil, ia kini huruf besar, jika ia adalah huruf besar, ia masih huruf besar, dan itu sahaja. 268 00:24:46,890 --> 00:24:54,290 Saya berkata demikian dalam supersection: Anda boleh menggunakan 32 jika anda mahu, tetapi saya cenderung lebih suka melakukan 'a' - A, 269 00:24:54,290 --> 00:25:01,150 bukannya hanya 32 biasa, kerana ia boleh menjadi apa-apa sedikit lain. 270 00:25:01,150 --> 00:25:03,610 Selepas sedikit daripada 32, ia boleh menjadi mana-mana, atau kita tidak akan mempunyai cukup 271 00:25:03,610 --> 00:25:05,840 nombor untuk mewakili semua watak-watak. 272 00:25:05,840 --> 00:25:09,110 Jadi, jika anda mendapat sedikit 32, ia boleh menjadi 64 bit, ia boleh menjadi sedikit 128. 273 00:25:09,110 --> 00:25:13,990 Mana-mana bit-bit boleh menjadi sedikit yang membezakan antara huruf besar dan huruf kecil. 274 00:25:13,990 --> 00:25:18,350 Saya tidak perlu untuk mengetahui bahawa ia adalah sedikit 32. 275 00:25:18,350 --> 00:25:27,130 Saya boleh menggunakan 'a' - A untuk mendapatkan sedikit yang berbeza antara kedua-dua 276 00:25:27,130 --> 00:25:33,000 tanpa perlu bergantung kepada bilangan ajaib yang ialah 32. 277 00:25:33,000 --> 00:25:38,770 Dan jadi sekarang, lain kiraan ganjil, dan sebagainya apa yang saya mahu lakukan? 278 00:25:38,770 --> 00:25:43,920 [Jawapan Pelajar, difahami] 279 00:25:43,920 --> 00:25:45,920 [Pelajar] Apa itu? 280 00:25:45,920 --> 00:25:49,850 Saya akan melakukannya dalam 1 saat. 281 00:25:49,850 --> 00:25:55,690 Jadi sekarang jika saya mahu saya mahu pastikan watak kini huruf kecil, 282 00:25:55,690 --> 00:26:04,140 dan sebagainya saya boleh ATAU sebanyak 32, dan 'a' 32 makna - A. 283 00:26:04,140 --> 00:26:06,510 Tetapi notis, oleh pemikiran yang sama seperti sebelumnya, bahawa jika 284 00:26:06,510 --> 00:26:11,670 surat sudah huruf kecil, maka ORing sebanyak 32 hanya menyimpan ia huruf kecil. 285 00:26:11,670 --> 00:26:16,220 Ia tidak pernah berubah watak asal. 286 00:26:16,220 --> 00:26:19,910 Tetapi sekarang saya tidak perlu untuk mengelakkan berkata, "Jika ia adalah huruf kecil, hanya lupa mengenainya, 287 00:26:19,910 --> 00:26:23,650 jika ia adalah huruf besar, kemudian mengubahnya. " 288 00:26:23,650 --> 00:26:26,900 Ia adalah lebih mudah untuk melakukan ini. 289 00:26:26,900 --> 00:26:33,190 [Pelajar] Adakah bahawa strategi menolak huruf besar dari kerja kecil jika ia tidak 32 orang? 290 00:26:33,190 --> 00:26:35,330 Jika ia adalah, seperti, 34 atau sesuatu? 291 00:26:35,330 --> 00:26:41,840 Jadi, anda perlu tahu bahawa perbezaan antara 2 -? >> 1 bit. 292 00:26:41,840 --> 00:26:49,840 Ia boleh menjadi lebih daripada 1 bit, selagi semua bit bawah kedudukan ini adalah sama. 293 00:26:49,840 --> 00:26:58,500 Jadi kita memerlukan sekurang-kurangnya 26 aksara - atau, terdapat 26 aksara. 294 00:26:58,500 --> 00:27:04,590 Jadi kita memerlukan sekurang-kurangnya 26 nombor untuk mewakili perbezaan - 295 00:27:04,590 --> 00:27:07,650 Perbezaan antara A dan 'a' untuk menjadi sekurang-kurangnya 26, 296 00:27:07,650 --> 00:27:10,760 atau lain kita tidak akan mewakili semua nombor nombor modal. 297 00:27:10,760 --> 00:27:18,630 Ini bermakna bahawa A, jika kita bermula pada 1, ia akan menggunakan semua bit ini, 298 00:27:18,630 --> 00:27:23,900 semua ini 5 bit pertama, untuk mewakili segala-galanya melalui Z. 299 00:27:23,900 --> 00:27:32,170 Itulah sebabnya agak depan, atau bit ini, sedikit seterusnya adalah salah satu yang dipilih untuk membezakan antara A dan '.' 300 00:27:32,170 --> 00:27:40,930 Itulah juga mengapa, dalam jadual ASCII, terdapat 5 simbol memisahkan huruf besar daripada huruf kecil. 301 00:27:40,930 --> 00:27:49,050 Sejak mereka adalah simbol-simbol, 5 tambahan yang membawa sehingga 32 menjadi perbezaan di antara mereka. 302 00:27:49,050 --> 00:27:51,840 [Pelajar] Jadi kita boleh melakukannya, kerana ASCII direka cara itu. 303 00:27:51,840 --> 00:27:57,280 Ya. Tetapi - perbezaan ASCII juga boleh menjadi kedua-dua bit ini. 304 00:27:57,280 --> 00:28:12,040 Seperti, jika A 10000001, dan 'a' adalah 11100001 - saya terlupa, apa sahaja. 305 00:28:12,040 --> 00:28:18,100 Tetapi jika ia adalah ini, maka kita masih boleh menggunakan 'a' - A. 306 00:28:18,100 --> 00:28:22,650 Ia hanya kini perbezaan antara A dan 'a' masih ini 2 bit. 307 00:28:22,650 --> 00:28:32,240 Saya fikir ia ditulis 48. Adakah ia 32 + 64? Saya rasa ia adalah? 308 00:28:32,240 --> 00:28:40,160 Ia masih akan menjadi 2 bit; setiap watak tunggal, seperti, Z dan z, K dan k, 309 00:28:40,160 --> 00:28:45,160 mereka masih akan mempunyai bit yang sama tepat ditetapkan kecuali bagi mereka 2 bit. 310 00:28:45,160 --> 00:28:48,870 Jadi selagi yang sentiasa benar, tanpa mengira jika kita menggunakan ASCII atau beberapa sistem lain, 311 00:28:48,870 --> 00:28:53,050 selagi kerana hanya terdapat beberapa set bit yang berbeza untuk setiap aksara, 312 00:28:53,050 --> 00:28:55,050 maka yang berfungsi dengan baik. 313 00:28:55,050 --> 00:29:06,110 Ia hanya bahawa 32 ditubuhkan kerana ia adalah satu yang pertama kita mungkin boleh menggunakan. >> Cool. 314 00:29:06,110 --> 00:29:14,520 Saya cenderung untuk memilih, dalam kes anda tidak pernah melihat, jika blok adalah hanya satu baris, 315 00:29:14,520 --> 00:29:24,280 anda boleh menyingkirkan daripada pendakap kerinting, jadi saya cenderung untuk memilih berbuat demikian. 316 00:29:24,280 --> 00:29:34,010 Juga, anda tahu bagaimana kita boleh melakukan perkara-perkara seperti [i] + = 1? 317 00:29:34,010 --> 00:29:41,090 Anda juga boleh melakukan s [i] bitwise DAN = 32. 318 00:29:41,090 --> 00:29:46,400 Dan bitwise OR = 32. 319 00:29:46,400 --> 00:29:51,490 Juga, mengira arena 2 == 0. 320 00:29:51,490 --> 00:30:00,900 Jadi ingat bahawa - saya tidak akan menulis - apa-apa nilai bukan sifar adalah benar, dan 0 adalah palsu. 321 00:30:00,900 --> 00:30:07,880 Jadi "jika kiraan arena 2 == 0" adalah sama sebagai berkata "jika tidak mengira mod 2." 322 00:30:07,880 --> 00:30:11,580 Saya mungkin akan hanya diterbalikkan garisan dan berkata, "jika kiraan arena 2, 323 00:30:11,580 --> 00:30:15,350 jangan ATAU 1, lagi yang DAN 1, "supaya saya tidak perlu" tidak. " 324 00:30:15,350 --> 00:30:18,650 Tetapi ini kerja-kerja seperti juga. 325 00:30:18,650 --> 00:30:25,660 Dan apa lagi yang boleh saya lakukan di sini? 326 00:30:25,660 --> 00:30:29,060 Anda boleh menggabungkan mereka dengan pertigaan jika anda mahu, tetapi kemudian yang hanya akan membuat perkara yang Messier 327 00:30:29,060 --> 00:30:33,770 dan mungkin lebih sukar untuk membaca, jadi kita tidak akan berbuat demikian. 328 00:30:33,770 --> 00:30:37,330 Sesiapa yang mempunyai apa-apa cadangan lain? 329 00:30:37,330 --> 00:30:41,580 Adakah bahawa semua masalah meminta? Oh yeah. 330 00:30:41,580 --> 00:30:51,070 Jadi menghilangkan ini baris kosong, sekarang kita akan mencetak f,% s sebagai satu rentetan, 331 00:30:51,070 --> 00:30:56,620 Kami akan mencetak f, s. 332 00:30:56,620 --> 00:30:59,330 Sekarang mari kita jalankan ia. Adakah saya melakukan apa-apa yang salah? 333 00:30:59,330 --> 00:31:03,200 Itulah \ a "; saya mahu n. 334 00:31:03,200 --> 00:31:07,840 Okay. Sekarang kita akan lari. Ia mungkin akan menjerit pada saya. 335 00:31:07,840 --> 00:31:11,250 Strlen adalah di string.h. 336 00:31:11,250 --> 00:31:14,290 Jadi ini adalah perkara yang baik tentang dilafaz adalah ia memberitahu anda apa yang ia dalam, 337 00:31:14,290 --> 00:31:19,140 bukannya GCC yang hanya berkata, "Hei, anda terlupa sesuatu, saya tidak tahu apa perkara itu." 338 00:31:19,140 --> 00:31:29,220 Tetapi ini akan memberitahu saya, "Kamu bertujuan untuk termasuk string.h." 339 00:31:29,220 --> 00:31:32,130 Jadi saya tidak meminta apa-apa, jadi ia tidak mengatakan apa-apa. 340 00:31:32,130 --> 00:31:42,540 Tetapi kita akan lakukan contoh mereka, "Terima kasih 4 add". 341 00:31:42,540 --> 00:31:47,880 Yang kelihatan betul. Hore. 342 00:31:47,880 --> 00:31:52,370 Jadi kembali ke utama anda, saya hampir tidak pernah melakukannya. 343 00:31:52,370 --> 00:31:57,110 Ia adalah pilihan. Dan utama adalah fungsi sahaja yang ia adalah pilihan. 344 00:31:57,110 --> 00:32:07,140 Jika anda tidak kembali apa-apa dari utama, ia diandaikan bahawa anda bertujuan untuk kembali 0. 345 00:32:07,140 --> 00:32:13,070 Soalan? 346 00:32:13,070 --> 00:32:20,980 Okay. Jadi sekarang masalah kedua. 347 00:32:20,980 --> 00:32:24,810 "Recall dari kuliah kedua 2 minggu yang bertukar-tukar nilai 2 pembolehubah 'dengan melepaskan 348 00:32:24,810 --> 00:32:30,780 mereka 2 pembolehubah untuk fungsi (walaupun dipanggil swap) tidak tepat bekerja, sekurang-kurangnya tidak tanpa 'petunjuk'. " 349 00:32:30,780 --> 00:32:37,020 Dan mengabaikan petunjuk sehingga kita sampai kepada mereka. 350 00:32:37,020 --> 00:32:40,070 Kita mahu untuk menukar 2 pembolehubah; kita tidak menggunakan fungsi untuk melakukannya. 351 00:32:40,070 --> 00:32:43,410 Kami masih akan melakukannya utama seperti ia berkata. 352 00:32:43,410 --> 00:32:48,360 Tetapi untuk menggunakan mereka 2 pembolehubah, kita tidak mahu menggunakan pembolehubah sementara. 353 00:32:48,360 --> 00:32:50,770 Terdapat 2 cara untuk melakukan ini. 354 00:32:50,770 --> 00:32:56,310 Anda boleh melakukannya menggunakan operator binari tradisional anda. 355 00:32:56,310 --> 00:33:00,180 Jadi adakah sesiapa tahu cara yang cepat dan kotor berbuat demikian? 356 00:33:00,180 --> 00:33:07,650 Ia sebenarnya mungkin mengambil beberapa minit pemikiran. Jika saya mempunyai - 357 00:33:07,650 --> 00:33:12,130 Saya akan menetapkan masalah seperti mereka meminta. Jadi, jika saya mempunyai 2 pembolehubah, A, yang hanya integer 358 00:33:12,130 --> 00:33:17,800 bahawa mereka memberi saya, dan jumlah pembolehubah B, yang merupakan satu lagi integer yang saya diberi. 359 00:33:17,800 --> 00:33:22,700 Jadi jika saya mempunyai ini 2 pembolehubah, sekarang saya mahu untuk menukar mereka. 360 00:33:22,700 --> 00:33:31,550 Tradisional, menggunakan operator binari biasa anda, saya maksudkan, seperti +, -, ÷. 361 00:33:31,550 --> 00:33:36,630 Tidak bitwise pengendali yang bertindak pada binari. 362 00:33:36,630 --> 00:33:39,600 Jadi menggunakan -, +, ÷, dan semua orang. 363 00:33:39,600 --> 00:33:52,980 Kita boleh swap dengan melakukan sesuatu seperti a = a + b, dan b = a - b, a = a - b. 364 00:33:52,980 --> 00:34:04,260 Jadi, kewarasan cek, dan kemudian kita akan melihat mengapa bahawa kerja-kerja. 365 00:34:04,260 --> 00:34:13,320 Katakan = 7, b = 3, maka a + b akan menjadi 10. 366 00:34:13,320 --> 00:34:18,820 Jadi kita sedang menetapkan 10 =, dan kemudian kita lakukan b = a - b. 367 00:34:18,820 --> 00:34:30,250 Jadi kita lakukan b = a - b, yang akan menjadi 7, dan b = a - b sekali lagi, 368 00:34:30,250 --> 00:34:38,650 atau = a - b. Yang akan menjadi 10-7 iaitu 3. 369 00:34:38,650 --> 00:34:44,850 Jadi sekarang, betul, 'a' adalah 7, b adalah 3, dan kini b 7 dan 'a' ialah 3. 370 00:34:44,850 --> 00:34:48,679 Jadi yang jenis masuk akal; 'a' adalah gabungan 2 nombor. 371 00:34:48,679 --> 00:34:53,000 Pada ketika ini, 'a' adalah gabungan, dan kemudian kita menolak keluar b asal, 372 00:34:53,000 --> 00:34:56,860 dan kemudian kita menolak apa yang asal '.' 373 00:34:56,860 --> 00:35:01,150 Tetapi ini tidak bekerja untuk semua nombor. 374 00:35:01,150 --> 00:35:08,880 Untuk melihat ini, mari kita pertimbangkan sistem, jadi kita biasanya berfikir integer sebagai 32 bit. 375 00:35:08,880 --> 00:35:13,050 Mari kita bekerja pada sesuatu yang hanya seperti 4 bit. 376 00:35:13,050 --> 00:35:15,450 Semoga saya tampil dengan contoh yang baik sekarang. 377 00:35:15,450 --> 00:35:18,680 Jadi, saya tahu, ini akan menjadi mudah. 378 00:35:18,680 --> 00:35:26,720 Katakan nombor 2 kami adalah 1111, dan 1111; supaya kita berada dalam binari sekarang. 379 00:35:26,720 --> 00:35:34,630 Dalam perpuluhan sebenar, jika anda mahu untuk memikirkan ia cara itu, = 15 dan b = 15 380 00:35:34,630 --> 00:35:37,630 Dan sebagainya yang kita harapkan, selepas kita menukar mereka - mereka tidak pun mempunyai untuk menjadi nombor yang sama, 381 00:35:37,630 --> 00:35:41,140 tetapi saya melakukannya dengan cara ini. 382 00:35:41,140 --> 00:35:47,100 Mari kita membuat mereka tidak nombor yang sama. Mari kita buat 1111 dan 0001. 383 00:35:47,100 --> 00:35:51,860 Jadi = 15 dan b = 1. 384 00:35:51,860 --> 00:35:57,670 Selepas kita menukar mereka, kita menjangkakan 'a' untuk menjadi 1 dan b untuk menjadi 15. 385 00:35:57,670 --> 00:36:01,780 Jadi langkah pertama kami adalah a = a + b. 386 00:36:01,780 --> 00:36:08,770 Nombor kami adalah hanya 4 bit lebar, jadi ',' yang merupakan 1111, + b, yang 0001, 387 00:36:08,770 --> 00:36:16,780 akan akhirnya menjadi 10000, tetapi kita hanya mempunyai 4 bit. 388 00:36:16,780 --> 00:36:22,540 Jadi sekarang = 0. 389 00:36:22,540 --> 00:36:34,080 Dan sekarang kita mahu untuk menetapkan b = a - b - sebenarnya, ini masih bekerja keluar sempurna. 390 00:36:34,080 --> 00:36:39,630 a = a - mari kita lihat jika ini kerja-kerja keluar dengan sempurna - b. 391 00:36:39,630 --> 00:36:53,720 Demikian maka b = 0 - 1, yang masih akan menjadi 15, dan kemudian a = a - b, yang akan menjadi 1. 392 00:36:53,720 --> 00:36:56,210 Mungkin ini berfungsi. 393 00:36:56,210 --> 00:36:59,020 Saya rasa seperti ada sebab ia tidak berfungsi menggunakan biasa. 394 00:36:59,020 --> 00:37:06,400 Okay, jadi bekerja pada andaian bahawa ia tidak bekerja dengan operasi binari biasa, 395 00:37:06,400 --> 00:37:15,040 dan saya akan mencari - saya akan Google untuk melihat jika ia adalah benar. 396 00:37:15,040 --> 00:37:23,490 Jadi kita mahu melakukannya menggunakan pengendali bitwise, dan petunjuk di sini adalah XOR. 397 00:37:23,490 --> 00:37:28,780 Jadi, memperkenalkan XOR (^) jika anda tidak pernah melihat lagi. 398 00:37:28,780 --> 00:37:34,610 Ia adalah, sekali lagi, pengendali bitwise jadi ia bertindak sedikit demi sedikit, dan it's - 399 00:37:34,610 --> 00:37:39,910 Jika anda mempunyai bit 0 dan 1, maka ini akan menjadi 1. 400 00:37:39,910 --> 00:37:45,230 Jika anda mempunyai 1 bit dan 0, ia akan menjadi 1, anda mempunyai 0 bit dan 0 ia akan menjadi 0, 401 00:37:45,230 --> 00:37:47,640 dan jika anda mempunyai 1 bit dan 1, ia akan menjadi 0. 402 00:37:47,640 --> 00:37:56,180 Jadi ia adalah seperti OR. Jika salah satu bit adalah benar, ia adalah 1, tetapi tidak seperti ATAU, ia tidak boleh menjadi kedua-dua bit yang benar. 403 00:37:56,180 --> 00:37:59,320 ATAU akan ini menjadi 1, XOR akan mempunyai ini adalah 0. 404 00:37:59,320 --> 00:38:02,250 Jadi kita akan mahu menggunakan XOR di sini. 405 00:38:02,250 --> 00:38:09,960 Berfikir tentang hal itu selama satu minit, saya pergi ke Google. 406 00:38:09,960 --> 00:38:16,230 Nah, anda tidak boleh membaca bahawa, Saya kini di halaman XOR algoritma swap. 407 00:38:16,230 --> 00:38:21,340 Semoga ini akan menjelaskan mengapa saya can't - 408 00:38:21,340 --> 00:38:34,190 Ini adalah tepat algoritma bahawa kita hanya melakukan. 409 00:38:34,190 --> 00:38:37,330 Saya masih tidak melihat mengapa - saya mesti telah hanya memilih satu contoh yang buruk, 410 00:38:37,330 --> 00:38:44,940 tetapi kes ini di mana 'a' yang berlaku kepada menjadi 0, selepas mendapat 5 bit, jadi sekarang 'a' adalah 0, 411 00:38:44,940 --> 00:38:48,730 itu adalah apa yang dipanggil "limpahan integer." 412 00:38:48,730 --> 00:38:54,370 Menurut Wikipedia, "Tidak seperti swap XOR, perubahan ini memerlukan bahawa ia menggunakan beberapa kaedah 413 00:38:54,370 --> 00:38:59,780 untuk menjamin bahawa x + y tidak menyebabkan limpahan integer. " 414 00:38:59,780 --> 00:39:08,350 Jadi ini tidak mempunyai masalah; ini adalah limpahan integer, tetapi saya melakukan sesuatu yang salah. 415 00:39:08,350 --> 00:39:10,520 Saya tidak pasti. Saya akan cuba untuk tampil dengan satu lagi. 416 00:39:10,520 --> 00:39:13,640 [Pelajar] Nah, tidak adalah limpahan integer apabila anda cuba untuk meletakkan beberapa di sana 417 00:39:13,640 --> 00:39:16,640 lebih besar daripada jumlah bit anda telah diperuntukkan? 418 00:39:16,640 --> 00:39:23,730 Yeah. Kami mempunyai 4 bit. That's - kami mempunyai 4 bit, kita kemudian cuba untuk menambah 1 kepadanya, jadi kita berakhir dengan 5 bit. 419 00:39:23,730 --> 00:39:26,690 Tetapi hanya sedikit kelima mendapat terputus, yeah. 420 00:39:26,690 --> 00:39:28,970 Ia mungkin sebenarnya - 421 00:39:28,970 --> 00:39:33,010 [Pelajar] Adakah yang membuang anda ralat, atau adakah itu - yang akan membuang kesilapan? 422 00:39:33,010 --> 00:39:40,720 No Jadi terdapat kesilapan tidak. Apabila anda sampai ke peringkat pemasangan, sedikit khas 423 00:39:40,720 --> 00:39:47,020 tempat ditetapkan bahawa berkata terdapat limpahan, tetapi dalam C anda jenis hanya tidak berurusan dengan itu. 424 00:39:47,020 --> 00:39:55,160 Anda sebenarnya tidak boleh berurusan dengan ia melainkan jika anda menggunakan arahan pemasangan khas di C. 425 00:39:55,160 --> 00:39:58,110 Mari kita berfikir tentang swap XOR. 426 00:39:58,110 --> 00:40:02,220 Dan saya fikir artikel Wikipedia mungkin juga telah mengatakan bahawa - 427 00:40:02,220 --> 00:40:07,310 Jadi ia juga dibesarkan aritmetik modular, jadi saya rasa saya adalah, dalam teori, melakukan aritmetik modular 428 00:40:07,310 --> 00:40:11,160 apabila saya berkata bahawa 0-1 adalah 15 lagi. 429 00:40:11,160 --> 00:40:15,410 Jadi yang sebenarnya mungkin - pada pemproses biasa yang tidak 0-1 = 15. 430 00:40:15,410 --> 00:40:20,430 Sejak kita akhirnya pada 0, kita tolak 1, maka ia hanya wrap kembali sekitar 1111. 431 00:40:20,430 --> 00:40:28,930 Jadi algoritma ini sebenarnya mungkin bekerja, a + b, a - b, b - a, yang mungkin denda. 432 00:40:28,930 --> 00:40:34,030 Tetapi ada beberapa pemproses yang tidak berbuat demikian, dan jadi ia tidak akan menjadi halus dalam orang-orang yang tertentu. 433 00:40:34,030 --> 00:40:39,880 Swap XOR akan bekerja di mana-mana pemproses. Okay. 434 00:40:39,880 --> 00:40:42,280 Idea ini adalah bahawa ia sepatutnya menjadi sama, walaupun. 435 00:40:42,280 --> 00:40:50,120 Jika kita menggunakan XOR entah bagaimana mendapatkan maklumat daripada kedua-dua ke dalam 1 pembolehubah, 436 00:40:50,120 --> 00:40:54,120 dan kemudian menarik keluar maklumat pembolehubah individu lagi. 437 00:40:54,120 --> 00:41:04,330 Jadi adakah sesiapa mempunyai idea / jawapan? 438 00:41:04,330 --> 00:41:14,540 [Pelajar jawapan, difahami] 439 00:41:14,540 --> 00:41:22,220 Jadi ini harus bekerja, dan juga, XOR adalah kalis tukar tertib. 440 00:41:22,220 --> 00:41:27,620 Tanpa mengira mana susunan nombor ini 2 berada di sini, 441 00:41:27,620 --> 00:41:30,100 keputusan ini akan menjadi sama. 442 00:41:30,100 --> 00:41:35,800 Jadi ^ b adalah b ^ a. 443 00:41:35,800 --> 00:41:51,860 Anda juga mungkin melihat ini ditulis sebagai ^ = b, b = a, a = b sekali lagi. 444 00:41:51,860 --> 00:42:00,200 Jadi ini adalah betul, dan untuk melihat mengapa kerja-kerja ini, berfikir bit. 445 00:42:00,200 --> 00:42:10,400 Menggunakan beberapa smallish, mari kita katakan 11001, dan 01100. 446 00:42:10,400 --> 00:42:12,790 Jadi ini adalah 'a'; ini adalah b. 447 00:42:12,790 --> 00:42:15,540 Jadi ^ = b. 448 00:42:15,540 --> 00:42:22,380 Kami akan menetapkan = 'a' kepada XOR ini 2 perkara. 449 00:42:22,380 --> 00:42:32,920 Jadi 1 ^ 0 1; 1 ^ 1 adalah 0; 0 ^ 1 adalah 1, dan 0 ^ 0 adalah 0, 1 ^ 0 ialah 1. 450 00:42:32,920 --> 00:42:37,380 Jadi ',' jika anda melihat nombor perpuluhan, ia akan menjadi - 451 00:42:37,380 --> 00:42:41,160 anda tidak akan melihat banyak hubungan antara asal 'a' dan baru ',' 452 00:42:41,160 --> 00:42:45,600 tetapi melihat bit, 'a' kini seperti jaringan maklumat 453 00:42:45,600 --> 00:42:49,970 kedua-dua asal 'a' dan b asal. 454 00:42:49,970 --> 00:42:57,930 Jadi, jika kita mengambil b ^, kita melihat bahawa kita akan berakhir pada asal '.' 455 00:42:57,930 --> 00:43:08,910 Dan jika kita mengambil asal 'a' ^ baru ',' kita lihat kita berakhir di b asal. 456 00:43:08,910 --> 00:43:18,380 Jadi (a ^ b) ^ b = '.' Asal 457 00:43:18,380 --> 00:43:27,910 Dan (a ^ b) ^ a = b asal. 458 00:43:27,910 --> 00:43:37,010 Terdapat - cara lain melihat ini adalah XOR apa-apa sendiri sentiasa 0. 459 00:43:37,010 --> 00:43:45,020 Jadi 1101 ^ 1101 semua bit akan menjadi sama. 460 00:43:45,020 --> 00:43:47,920 Jadi ada tidak akan menjadi kes di mana 1 adalah 0 dan yang lain adalah 1. 461 00:43:47,920 --> 00:43:51,080 Jadi ini adalah 0000. 462 00:43:51,080 --> 00:43:57,240 Yang sama dengan ini. (A ^ b) ^ b adalah seperti ^ (b ^ b). 463 00:43:57,240 --> 00:44:03,680 (B ^ b) akan menjadi 0; ^ 0 hanya akan menjadi ',' kerana semua bit adalah 0. 464 00:44:03,680 --> 00:44:08,050 Jadi satu-satunya yang akan menjadi mana 'a' pada asalnya 1 - mempunyai orang. 465 00:44:08,050 --> 00:44:12,070 Dan idea yang sama di sini; Saya agak pasti ia juga kalis tukar tertib. 466 00:44:12,070 --> 00:44:17,590 Yeah. Saya tidak mengatakan sebelum ini bahawa ia adalah kalis tukar tertib. 467 00:44:17,590 --> 00:44:24,680 ^ ',' Dan ia bersekutu, jadi sekarang (b ^ a) ^ a. 468 00:44:24,680 --> 00:44:28,970 Dan kita boleh melakukannya b ^ (a ^ a). 469 00:44:28,970 --> 00:44:31,540 Dan sebagainya lagi, kita akan mendapat b asal. 470 00:44:31,540 --> 00:44:37,120 Jadi 'a' kini gabungan 'a' b dan bersama-sama. 471 00:44:37,120 --> 00:44:49,660 Menggunakan kombo baru kami 'kita katakan b = kombo' a '^ b asal, kita akan mendapat asal'. ' 472 00:44:49,660 --> 00:45:05,170 Dan kini kombo = '' ^ b baru, yang merupakan asal - atau yang kini apa 'a' atau b. 473 00:45:05,170 --> 00:45:13,620 Itulah kes ini ke sini. Ini adalah = b, b lama. 474 00:45:13,620 --> 00:45:16,550 Jadi sekarang semuanya kembali dalam perintah itu bertukar. 475 00:45:16,550 --> 00:45:22,960 Jika kita benar-benar melihat bit, b = a ^ b, akan XOR ini 2, 476 00:45:22,960 --> 00:45:33,920 dan jawapannya akan ini, dan kemudian = a ^ b XORing 2 ini dan jawapannya adalah ini. 477 00:45:33,920 --> 00:45:41,090 Soalan? Okay. Jadi yang terakhir adalah agak ketara lebih sukar. 478 00:45:41,090 --> 00:45:43,180 [Pelajar] Saya fikir dia mempunyai soalan tentang hal itu. >> Oh, maaf. 479 00:45:43,180 --> 00:45:49,380 [Pelajar] Apa sebenarnya lebih cepat? Jika anda menggunakan XOR ini, atau adakah ia jika anda mengisytiharkan pembolehubah baru? 480 00:45:49,380 --> 00:45:55,190 Jadi apa sebenarnya adalah lebih cepat, mengisytiharkan pembolehubah baru atau menggunakan XOR untuk menukar? 481 00:45:55,190 --> 00:45:59,600 Jawapannya ialah, dalam semua kemungkinan, pembolehubah sementara. 482 00:45:59,600 --> 00:46:05,780 Dan itu adalah kerana sekali ia disusun ke bawah - jadi di peringkat pemasangan, 483 00:46:05,780 --> 00:46:12,320 tidak ada perkara seperti pembolehubah tempatan atau mana-mana pembolehubah sementara atau mana-mana barangan ini. 484 00:46:12,320 --> 00:46:16,060 Mereka hanya suka - ada ingatan, dan terdapat daftar. 485 00:46:16,060 --> 00:46:20,920 Daftar mana perkara yang sedang giat berlaku. 486 00:46:20,920 --> 00:46:24,750 Anda tidak menambah 2 perkara dalam ingatan; anda menambah 2 perkara dalam daftar. 487 00:46:24,750 --> 00:46:28,160 Dan anda membawa perkara-perkara dari memori ke dalam daftar kemudian menambah mereka, 488 00:46:28,160 --> 00:46:33,180 dan kemudian anda mungkin meletakkan mereka kembali ke dalam memori, tetapi semua tindakan yang berlaku dalam daftar. 489 00:46:33,180 --> 00:46:38,750 Jadi, apabila anda menggunakan pendekatan ubah sementara, biasanya apa yang berlaku ialah 490 00:46:38,750 --> 00:46:42,810 2 nombor sudah di daftar. 491 00:46:42,810 --> 00:46:46,570 Dan kemudian dari sudut bahawa pada, selepas anda telah bertukar mereka, 492 00:46:46,570 --> 00:46:51,540 ia hanya akan mula menggunakan daftar lain. 493 00:46:51,540 --> 00:46:56,510 Mana-mana anda telah menggunakan b, ia hanya akan menggunakan daftar yang sudah menyimpan '.' 494 00:46:56,510 --> 00:47:02,180 Jadi ia tidak perlu berbuat apa-apa untuk benar-benar melakukan swap. Yeah? 495 00:47:02,180 --> 00:47:05,690 [Pelajar] Tetapi ia juga mengambil memori yang lebih, kan? 496 00:47:05,690 --> 00:47:10,280 Ia hanya akan mengambil memori yang lebih jika ia perlu untuk menyimpan bahawa pembolehubah sementara. 497 00:47:10,280 --> 00:47:14,830 Seperti jika anda kemudian menggunakan bahawa pembolehubah sementara lagi tempat, 498 00:47:14,830 --> 00:47:18,920 kemudian - atau anda menetapkan sesuatu pembolehubah yang sementara. 499 00:47:18,920 --> 00:47:24,630 Jadi, jika pada bila-bila masa ',' b dalam menggoda mempunyai nilai-nilai yang berbeza atau sesuatu, 500 00:47:24,630 --> 00:47:30,680 maka ia akan mempunyai lokasi yang berbeza dalam ingatan, tetapi ia adalah benar bahawa 501 00:47:30,680 --> 00:47:34,800 terdapat banyak pembolehubah tempatan yang hanya akan wujud di dalam daftar. 502 00:47:34,800 --> 00:47:44,370 Di mana, ia tidak pernah dimasukkan ke dalam ingatan, dan supaya anda tidak membuang memori. 503 00:47:44,370 --> 00:47:58,620 Okay. Soalan terakhir ini adalah sedikit lebih. 504 00:47:58,620 --> 00:48:04,850 Jadi di sini, pada perkakas ini CS50, terdapat kamus. 505 00:48:04,850 --> 00:48:12,390 Dan sebab ini adalah kerana [? B66] adalah satu pemeriksa ejaan yang mana anda akan menulis 506 00:48:12,390 --> 00:48:15,780 menggunakan jadual hash atau cuba atau beberapa struktur data. 507 00:48:15,780 --> 00:48:22,660 Anda akan menulis pemeriksa ejaan, dan anda akan menggunakan kamus ini untuk berbuat demikian. 508 00:48:22,660 --> 00:48:28,280 Tetapi bagi masalah ini, kita hanya akan melihat untuk melihat jika satu perkataan di dalam kamus. 509 00:48:28,280 --> 00:48:31,250 Jadi, daripada menyimpan kamus keseluruhan dalam beberapa struktur data 510 00:48:31,250 --> 00:48:35,180 dan kemudian mencari seluruh dokumen untuk melihat sama ada apa-apa yang silap eja, 511 00:48:35,180 --> 00:48:38,490 kita hanya mahu untuk mencari 1 perkataan. Jadi kita hanya boleh mengimbas keseluruhan kamus 512 00:48:38,490 --> 00:48:44,300 dan jika kita tidak pernah mencari perkataan di dalam kamus keseluruhan, maka ia tidak berada di sana. 513 00:48:44,300 --> 00:48:52,150 Jika kita mengimbas seluruh kamus dan jangan melihat perkataan, maka kita baik, kita mendapati ia. 514 00:48:52,150 --> 00:48:56,580 Ia mengatakan di sini bahawa kita mahu mula mencari pada majlis pengendalian fail-C, 515 00:48:56,580 --> 00:48:59,930 kerana kita mahu untuk membaca kamus, 516 00:48:59,930 --> 00:49:07,680 tetapi saya akan memberi pembayang di sini yang fungsi anda harus berfikir. 517 00:49:07,680 --> 00:49:11,510 Saya akan menulis mereka pada kawasan. 518 00:49:11,510 --> 00:49:20,490 Jadi yang utama anda akan mahu untuk melihat yang terbuka dan kemudian f, tidak dapat tidak, f ditutup, 519 00:49:20,490 --> 00:49:26,540 yang akan pergi pada akhir program anda, dan f f imbasan. 520 00:49:26,540 --> 00:49:31,060 Anda juga boleh menggunakan f membaca, tetapi anda mungkin tidak mahu 521 00:49:31,060 --> 00:49:34,200 kerana itu - anda tidak akhirnya memerlukan bahawa. 522 00:49:34,200 --> 00:49:41,880 F imbasan f adalah apa yang anda akan menggunakan untuk mengimbas lebih kamus. 523 00:49:41,880 --> 00:49:46,370 Dan supaya anda tidak perlu untuk kod penyelesaian, hanya cuba dan suka kod pseudo-cara anda 524 00:49:46,370 --> 00:50:05,200 kepada penyelesaian, dan kemudian kita akan berbincang. 525 00:50:05,200 --> 00:50:14,110 Dan sebenarnya, kerana saya sudah memberikan anda ini, jika anda pergi ke mana-mana terminal atau shell perkakas anda, 526 00:50:14,110 --> 00:50:18,250 Saya akan saya biasanya jika anda tidak pernah melihat lagi, saya tidak tahu jika anda lakukan di dalam kelas, 527 00:50:18,250 --> 00:50:23,490 tetapi lelaki, jadi lelaki halaman, cukup berguna untuk melihat cukup banyak apa-apa fungsi. 528 00:50:23,490 --> 00:50:27,330 Jadi saya boleh lakukan, seperti, f lelaki, imbasan f. 529 00:50:27,330 --> 00:50:32,300 Ini adalah kini maklumat tentang keluarga f imbasan fungsi. 530 00:50:32,300 --> 00:50:37,070 Saya juga boleh melakukan f lelaki, terbuka, dan yang akan memberikan saya butiran itu. 531 00:50:37,070 --> 00:50:40,750 Jadi, jika anda tahu apa fungsi anda menggunakan, atau anda sedang membaca kod 532 00:50:40,750 --> 00:50:43,000 dan anda melihat beberapa fungsi dan anda seperti, "Apakah ini lakukan?" 533 00:50:43,000 --> 00:50:45,280 Hanya lelaki yang nama fungsi. 534 00:50:45,280 --> 00:50:47,340 Terdapat beberapa contoh pelik di mana anda mungkin perlu mengatakan 535 00:50:47,340 --> 00:50:51,620 suka. lelaki 2 yang nama fungsi, atau lelaki 3 bahawa nama fungsi, 536 00:50:51,620 --> 00:50:58,230 tetapi anda hanya perlu untuk melakukan bahawa jika seorang lelaki fungsi nama tidak berlaku untuk bekerja kali pertama. 537 00:50:58,230 --> 00:51:03,010 [Pelajar] Jadi saya membaca halaman lelaki untuk terbuka, tetapi saya masih keliru tentang bagaimana untuk menggunakan dan program. 538 00:51:03,010 --> 00:51:06,170 Okay. Banyak muka surat manusia adalah kurang daripada membantu. 539 00:51:06,170 --> 00:51:08,470 Mereka lebih membantu jika anda sudah tahu apa yang mereka lakukan 540 00:51:08,470 --> 00:51:12,670 dan kemudian anda hanya perlu ingat perintah hujah atau sesuatu. 541 00:51:12,670 --> 00:51:17,640 Atau mereka boleh memberikan anda gambaran umum, tetapi sesetengah daripada mereka adalah sangat menggalakkan. 542 00:51:17,640 --> 00:51:22,220 Seperti f f imbasan, juga. Ia memberikan anda maklumat untuk semua fungsi-fungsi ini, 543 00:51:22,220 --> 00:51:28,120 dan baris 1 turun di sini berlaku untuk mengatakan, "F imbasan f membaca dari sudut rentetan atau aliran." 544 00:51:28,120 --> 00:51:32,360 Tetapi f membuka. Jadi, bagaimana kita akan menggunakan f terbuka? 545 00:51:32,360 --> 00:51:38,470 Idea program yang perlu untuk melakukan fail I / O adalah bahawa 546 00:51:38,470 --> 00:51:45,070 pertama anda perlu untuk membuka fail yang anda mahu untuk melakukan perkara-perkara dengan, dan tidak dapat dielakkan, 547 00:51:45,070 --> 00:51:51,220 membaca perkara-perkara dari fail tersebut dan melakukan barangan dengan mereka. 548 00:51:51,220 --> 00:51:55,350 F terbuka adalah apa yang kita gunakan untuk membuka fail. 549 00:51:55,350 --> 00:52:04,190 Perkara yang kita akan mendapat kembali, jadi apa fail yang kita mahu untuk membuka, ia memberikan kita - 550 00:52:04,190 --> 00:52:11,970 di sini ia berkata "/ user / share / Dict / perkataan." 551 00:52:11,970 --> 00:52:16,740 Ini adalah fail yang kita mahu untuk membuka, dan kita mahu untuk membuka - 552 00:52:16,740 --> 00:52:21,440 kita perlu jelas menentukan sama ada kita mahu untuk membuka ia untuk membaca atau jika kita mahu membukanya untuk menulis. 553 00:52:21,440 --> 00:52:26,490 Ada beberapa kombinasi dan barangan, tetapi kita mahu untuk membuka ini untuk membaca. 554 00:52:26,490 --> 00:52:29,380 Kami mahu membaca dari fail. 555 00:52:29,380 --> 00:52:34,290 Jadi apakah ini? Ia mengembalikan fail bintang (*), 556 00:52:34,290 --> 00:52:37,260 dan saya hanya akan menunjukkan segala-galanya dalam f pembolehubah, jadi *, 557 00:52:37,260 --> 00:52:40,840 sekali lagi, ia adalah penunjuk, tetapi kita tidak mahu berurusan dengan penunjuk. 558 00:52:40,840 --> 00:52:46,470 Anda boleh berfikir f, f kini pembolehubah yang anda hendak gunakan untuk mewakili fail. 559 00:52:46,470 --> 00:52:49,850 Jadi jika anda mahu untuk membaca dari fail, anda membaca dari f. 560 00:52:49,850 --> 00:52:54,820 Jika anda ingin menutup fail, anda menutup f. 561 00:52:54,820 --> 00:53:00,350 Jadi pada akhir program apabila kita tidak dapat dielakkan mahu untuk menutup fail, apa yang kita harus lakukan? 562 00:53:00,350 --> 00:53:06,750 Kami mahu menutup f. 563 00:53:06,750 --> 00:53:12,600 Jadi sekarang fungsi fail lepas bahawa kita akan mahu menggunakan imbasan f, f scan f. 564 00:53:12,600 --> 00:53:20,930 Dan apa yang tidak adalah ia mengimbas melalui fail mencari corak untuk perlawanan. 565 00:53:20,930 --> 00:53:39,100 Melihat halaman lelaki di sini, kita lihat f f int imbasan, mengabaikan nilai pulangan untuk sekarang. 566 00:53:39,100 --> 00:53:45,230 Hujah pertama adalah aliran fail *, jadi hujah pertama yang kita akan mahu untuk lulus f. 567 00:53:45,230 --> 00:53:47,900 Kami pengimbasan lebih f. 568 00:53:47,900 --> 00:53:53,680 Hujah kedua adalah rentetan format. 569 00:53:53,680 --> 00:53:58,310 Saya akan memberikan anda rentetan format sekarang. 570 00:53:58,310 --> 00:54:05,180 Saya fikir kita berlaku untuk mengatakan, 127s \ n, banyak yang tidak perlu. 571 00:54:05,180 --> 00:54:12,490 Idea apa yang rentetan format, anda boleh berfikir f imbasan sebagai bertentangan f cetak. 572 00:54:12,490 --> 00:54:17,160 Jadi f cetak, f cetak kita juga menggunakan jenis ini parameter format, 573 00:54:17,160 --> 00:54:25,000 tetapi dalam f cetak apa yang kita lakukan - mari kita melihat bersamaan. 574 00:54:25,000 --> 00:54:32,550 Jadi mencetak f, dan sebenarnya terdapat juga f cetak f, mana hujah pertama akan menjadi f. 575 00:54:32,550 --> 00:54:40,980 Apabila anda mencetak f, kita boleh mengatakan sesuatu seperti, "cetak 127s \ n" dan kemudian jika kita lulus beberapa rentetan, 576 00:54:40,980 --> 00:54:44,050 ia akan mencetak rentetan ini dan kemudian baris baru. 577 00:54:44,050 --> 00:54:49,690 Apa 127 cara, saya agak pasti, tetapi saya tidak pernah terhad diri saya kepadanya, 578 00:54:49,690 --> 00:54:52,470 Anda akan tidak perlu untuk mengatakan '127 'dalam f cetak, 579 00:54:52,470 --> 00:54:57,090 tetapi apa yang ia bermakna adalah mencetak pertama 127 aksara. 580 00:54:57,090 --> 00:54:59,350 Jadi saya cukup yakin bahawa kes itu. Anda boleh Google untuk itu. 581 00:54:59,350 --> 00:55:03,000 Tetapi dalam satu seterusnya saya hampir positif ia bermakna bahawa. 582 00:55:03,000 --> 00:55:08,880 Jadi ini adalah mencetak pertama 127 aksara, diikuti oleh baris baru. 583 00:55:08,880 --> 00:55:14,680 F imbasan f sekarang, bukannya melihat pembolehubah dan percetakan, 584 00:55:14,680 --> 00:55:22,620 ia akan melihat beberapa rentetan, dan menyimpan corak memasuki pemboleh ubah itu. 585 00:55:22,620 --> 00:55:26,360 Mari kita sebenarnya menggunakan f imbasan dalam contoh yang berbeza. 586 00:55:26,360 --> 00:55:31,670 Jadi mari kita mengatakan bahawa kita mempunyai beberapa int, x = 4, 587 00:55:31,670 --> 00:55:41,110 dan kami mahu mewujudkan rentetan diperbuat daripada mahu untuk mewujudkan rentetan 588 00:55:41,110 --> 00:55:44,250 yang seperti, ini akan tampil lebih kemudian, 589 00:55:44,250 --> 00:55:49,020 sesuatu yang hanya seperti 4.jpg. 590 00:55:49,020 --> 00:55:51,870 Jadi ini mungkin menjadi satu program di mana anda akan mempunyai jumlah kaunter, 591 00:55:51,870 --> 00:55:56,420 kesimpulan menangani i, dan anda mahu menyimpan sekumpulan imej. 592 00:55:56,420 --> 00:56:02,430 Jadi anda mahu untuk menyelamatkan i.jpg, di mana i adalah beberapa lelaran gelung anda. 593 00:56:02,430 --> 00:56:05,500 Jadi bagaimana kita membuat rentetan ini bagi yang JPEG? 594 00:56:05,500 --> 00:56:11,720 Jika anda mahu untuk mencetak 4.jpg, kita hanya boleh mengatakan f cetak, d.jpg%, 595 00:56:11,720 --> 00:56:14,410 dan kemudian ia akan mencetak bagi yang JPEG. 596 00:56:14,410 --> 00:56:20,050 Tetapi jika kita ingin menyelamatkan 4.jpg rentetan, kita menggunakan f imbasan. 597 00:56:20,050 --> 00:56:30,860 Jadi rentetan s - sebenarnya kita can't - watak, char s, mari kita pergi 100. 598 00:56:30,860 --> 00:56:35,400 Jadi saya hanya mengisytiharkan beberapa pelbagai 100 aksara, 599 00:56:35,400 --> 00:56:39,830 dan itulah apa yang kita tidak dapat dielakkan akan menyimpan bahawa JPEG masuk 600 00:56:39,830 --> 00:56:47,920 Jadi kita hendak untuk menggunakan f imbasan, dan format, bagaimana kita akan mengatakan d.jpg% 601 00:56:47,920 --> 00:56:54,980 untuk mencetak 4.jpg, format ini akan menjadi d.jpg%. 602 00:56:54,980 --> 00:57:04,020 Jadi format adalah d.jpg%, apa yang kita mahu untuk menggantikan% d dengan ialah x, 603 00:57:04,020 --> 00:57:06,590 dan sekarang kita perlu untuk menyimpan tali bahawa tempat. 604 00:57:06,590 --> 00:57:12,500 Dan di mana kita pergi untuk menyimpan rentetan ini adalah dalam pelbagai s. 605 00:57:12,500 --> 00:57:21,640 Jadi selepas baris ini, kod s, jika kita mencetak f,% s s berubah-ubah, 606 00:57:21,640 --> 00:57:26,280 ia akan mencetak 4.jpg. 607 00:57:26,280 --> 00:57:38,930 Jadi f imbasan f adalah sama seperti imbasan f, kecuali kini ia mencari lebih fail ini 608 00:57:38,930 --> 00:57:43,600 untuk apa untuk menyimpan dalam s. 609 00:57:43,600 --> 00:57:46,160 Itulah apa hujah terakhir akan menjadi. 610 00:57:46,160 --> 00:57:54,170 Kami ingin menyimpan - "Imbas f keluarga imbasan fungsi dalam kedua-dua mengikut format seperti yang cuba di bawah. 611 00:57:54,170 --> 00:58:02,450 Jika mana-mana disimpan dalam mata lokasi anda mungkin kembali - " 612 00:58:02,450 --> 00:58:12,910 Tidak, kita mungkin baik. Biarkan saya berfikir untuk sesaat. 613 00:58:12,910 --> 00:58:26,350 Jadi imbasan f tidak - apa palang pintu adalah fungsi yang adakah itu? 614 00:58:26,350 --> 00:58:31,650 Jadi imbasan f tidak akan mengambil integer dan melakukan dot jpg. 615 00:58:31,650 --> 00:58:43,490 Ia akan [Mumbles]. 616 00:58:43,490 --> 00:58:49,360 Simpan pembolehubah int dalam rentetan int C. 617 00:58:49,360 --> 00:58:55,940 Apa yang berubah-ubah ini, atau apakah fungsi ini dipanggil? 618 00:58:55,940 --> 00:59:04,950 Ya. That's - ya. Jadi apa yang saya telah menentukan kepada anda sebelum ini adalah s f cetak, 619 00:59:04,950 --> 00:59:09,820 yang - yang masuk akal banyak lagi, mengapa saya berkata ia adalah lebih seperti f cetak. 620 00:59:09,820 --> 00:59:14,700 Scan f masih jenis seperti f cetak, tetapi s f cetak akan mengimbas ia lebih 621 00:59:14,700 --> 00:59:17,510 dan menggantikan pembolehubah dan kini menyimpan ia dalam rentetan. 622 00:59:17,510 --> 00:59:19,620 Daripada percetakan, ia menyimpan ia dalam rentetan. 623 00:59:19,620 --> 00:59:25,070 Jadi mengabaikan sepenuhnya. Anda masih boleh berfikir specifier format seperti seperti yang f cetak. 624 00:59:25,070 --> 00:59:34,510 Jadi sekarang, jika kita mahu melakukan perkara yang 4.jpg, kita akan melakukan s f cetak, x ini. 625 00:59:34,510 --> 00:59:38,520 Jadi apa imbasan f melakukan - apa soalan anda akan menjadi? 626 00:59:38,520 --> 00:59:40,820 [Pelajar] Saya hanya keliru tentang apa yang kita cuba lakukan di sini 627 00:59:40,820 --> 00:59:43,450 dengan JPEG. Bolehkah anda menjelaskan bahawa masa 1 lagi? 628 00:59:43,450 --> 00:59:52,710 Jadi ini adalah - ia adalah relevan kurang f imbasan f kini; diharapkan, ia akan mengikat kembali dalam beberapa jenis cara. 629 00:59:52,710 --> 01:00:02,240 Tetapi apa yang saya pada mulanya bercadang untuk menunjukkan adalah - ini sebenarnya langsung relevan kepada [ini? F5] 630 01:00:02,240 --> 01:00:08,520 Anda akan menggunakan s f cetak, di mana, katakan kita mempunyai 100 imej, 631 01:00:08,520 --> 01:00:13,630 dan anda mahu membaca imej 1.jpg, 2.jpg, 3.jpg. 632 01:00:13,630 --> 01:00:21,520 Jadi dalam usaha untuk berbuat demikian, anda perlu f terbuka, dan kemudian anda perlu untuk lulus dalam rentetan yang anda mahu untuk membuka. 633 01:00:21,520 --> 01:00:30,020 Jadi kita mahu untuk membuka 1.jpg; dalam usaha untuk mewujudkan rentetan yang 1.jpg, 634 01:00:30,020 --> 01:00:37,660 f cetak kita lakukan s% d.jpg kita tidak lakukan untuk int i = 0. 635 01:00:37,660 --> 01:00:46,580 i <40, i + +. 636 01:00:46,580 --> 01:00:51,130 Jadi s cetak f% d.jpg i. 637 01:00:51,130 --> 01:00:56,320 Jadi selepas baris ini, kini pembolehubah atau s pelbagai akan 1.jpg. 638 01:00:56,320 --> 01:01:10,610 Atau, 0.jpg, 1.jpg, 2.jpg. Dan supaya kita boleh membuka, pada gilirannya, setiap imej untuk membaca. 639 01:01:10,610 --> 01:01:19,550 Supaya apa yang s mencetak f tidak. Adakah anda melihat apa yang s mencetak f kini melakukan? 640 01:01:19,550 --> 01:01:25,720 [Pelajar] Okay, jadi ia mengambil - ia mewujudkan rentetan, something.jpg, dan kemudiannya menyimpan. 641 01:01:25,720 --> 01:01:30,360 Ya. Ia mencipta - ini adalah satu lagi rentetan format, hanya seperti imbasan f dan f cetak, 642 01:01:30,360 --> 01:01:37,530 di mana ia memasukkan semua pembolehubah ke hujah kedua, mungkin bertentangan i. 643 01:01:37,530 --> 01:01:42,280 Mungkin - Maksud saya, itulah kes itu. Tetapi apa sahaja perintah hujah. 644 01:01:42,280 --> 01:01:45,440 Ia akan memasukkan semua pembolehubah ke dalam rentetan format 645 01:01:45,440 --> 01:01:52,250 dan kemudian simpan ke dalam buffer kita, kita panggil yang penampan, ia adalah di mana kita menyimpan rentetan. 646 01:01:52,250 --> 01:02:00,750 Jadi kita menyimpan dalam s rentetan diformat dengan betul,% d telah digantikan dengan 4. 647 01:02:00,750 --> 01:02:08,080 [Pelajar] Jadi jika kita melakukan ini, adalah f ubah hanya akan ditukarkan? 648 01:02:08,080 --> 01:02:18,110 Ya. Jadi kita harus menutup f asal sebelum melakukan ini. 649 01:02:18,110 --> 01:02:22,810 Tetapi - dan kemudian juga, jika tidak ada f membuka sini, maka kita akan perlu untuk mengatakan - 650 01:02:22,810 --> 01:02:29,280 Yeah. Tetapi ia akan membuka seratus fail yang berbeza. 651 01:02:29,280 --> 01:02:37,360 [Pelajar] Tetapi kita tidak akan dapat untuk mengakses atau - okay. 652 01:02:37,360 --> 01:02:44,230 Okay. Jadi imbasan f, f scan f, adalah jenis idea yang sama, 653 01:02:44,230 --> 01:02:53,610 tetapi sebaliknya, dan bukannya menyimpan ia ke dalam rentetan, ia lebih seperti anda sekarang 654 01:02:53,610 --> 01:03:02,420 akan lebih menyengat dan corak padanan terhadap rentetan bahawa dan menyimpan keputusan ke pembolehubah. 655 01:03:02,420 --> 01:03:11,290 Anda boleh menggunakan f imbasan untuk menghuraikan atas sesuatu seperti 4.jpg, dan menyimpan 4 integer ke x int jumlah. 656 01:03:11,290 --> 01:03:13,430 Itulah apa yang kita boleh menggunakan f imbasan untuk. 657 01:03:13,430 --> 01:03:16,300 F imbasan f akan untuk berbuat demikian pada baris arahan. 658 01:03:16,300 --> 01:03:19,200 Saya sebenarnya cukup yakin ini adalah apa yang perpustakaan CS50 tidak. 659 01:03:19,200 --> 01:03:29,050 Jadi, apabila anda mengatakan, "mendapatkan int," ia adalah imbasan f-ing atas - f imbasan adalah cara anda mendapat input pengguna. 660 01:03:29,050 --> 01:03:34,670 F imbasan f akan melakukan perkara yang sama tetapi menggunakan fail untuk mengimbas alih. 661 01:03:34,670 --> 01:03:41,090 Jadi di sini, kita mengimbas lebih fail ini. 662 01:03:41,090 --> 01:03:45,460 Corak kita cuba untuk perlawanan adalah beberapa rentetan yang adalah 127 aksara 663 01:03:45,460 --> 01:03:48,100 diikuti oleh baris baru 664 01:03:48,100 --> 01:03:54,770 Jadi saya cukup yakin kita walaupun hanya boleh mengatakan "perlawanan s," kerana di dalam kamus 665 01:03:54,770 --> 01:03:57,770 kita berlaku, kita dijamin tiada perkataan yang panjang, 666 01:03:57,770 --> 01:04:03,310 dan juga f imbasan f, saya fikir, akan berhenti di garisan baru tidak kira apa. 667 01:04:03,310 --> 01:04:06,970 Tetapi kita akan termasuk barisan baru dalam perlawanan itu, dan - 668 01:04:06,970 --> 01:04:13,960 [Pelajar] Jika kita tidak termasuk barisan baru, tidak akan ia mencari bahagian-bahagian perkataan? 669 01:04:13,960 --> 01:04:22,900 Ia - setiap melihat kamus - 670 01:04:22,900 --> 01:04:26,200 Jadi, dalam kamus, semua ini adalah perkataan kami. 671 01:04:26,200 --> 01:04:30,500 Masing-masing adalah pada baris baru. 672 01:04:30,500 --> 01:04:32,510 F imbasan akan memilih perkataan ini. 673 01:04:32,510 --> 01:04:38,750 Jika kita tidak termasuk barisan baru, maka ia adalah mustahil bahawa f imbasan seterusnya hanya akan membaca baris baru. 674 01:04:38,750 --> 01:04:44,180 Tetapi termasuk barisan baru maka hanya akan mengabaikan barisan baru. 675 01:04:44,180 --> 01:04:49,440 Tetapi kita tidak pernah akan mendapat sebahagian daripada perkataan, kerana kita sentiasa membaca sehingga kepada barisan baru, tidak kira apa. 676 01:04:49,440 --> 01:04:54,530 [Pelajar] Tetapi bagaimana jika anda mencari perkataan "cissa," seperti cissa. 677 01:04:54,530 --> 01:04:57,380 Ia akan mendapati bahawa, dan berkata ia adalah perlawanan? 678 01:04:57,380 --> 01:05:05,110 Jadi di sini kita - ia akan membaca dalam - ini sebenarnya adalah satu titik yang baik. 679 01:05:05,110 --> 01:05:10,660 Kami pernah menggunakan arus - perkataan yang kita cari adalah hujah baris arahan pertama. 680 01:05:10,660 --> 01:05:16,460 Jadi tali, perkataan = argv 1. 681 01:05:16,460 --> 01:05:20,020 Jadi rentetan kita cari adalah argv 1. 682 01:05:20,020 --> 01:05:23,290 Kami tidak mencari perkataan di dalam f imbasan kami semua. 683 01:05:23,290 --> 01:05:28,030 Apa yang kita lakukan dengan imbasan f mendapat setiap perkataan dalam kamus, 684 01:05:28,030 --> 01:05:34,320 dan kemudian sekali kita mempunyai bahawa perkataan yang kita hendak menggunakan strcmp untuk membandingkan mereka. 685 01:05:34,320 --> 01:05:39,210 Kami akan membandingkan perkataan kami dan apa yang kita hanya membaca masuk 686 01:05:39,210 --> 01:05:45,110 Jadi tidak dapat dielakkan, kita akan berakhir sehingga melakukan sekumpulan imbasan fs 687 01:05:45,110 --> 01:05:52,130 sehingga ia hanya kebetulan bahawa f imbasan akan kembali - 688 01:05:52,130 --> 01:05:54,800 ia akan kembali satu, selagi ia telah dipadankan perkataan baru, 689 01:05:54,800 --> 01:06:01,360 dan ia akan mengembalikan sesuatu yang lain dengan seberapa segera kerana ia telah gagal untuk memadankan perkataan. 690 01:06:01,360 --> 01:06:08,440 Kita membaca seluruh kamus, menyimpan baris demi baris setiap perkataan ke dalam s berubah-ubah. 691 01:06:08,440 --> 01:06:17,240 Kemudian kita membandingkan perkataan dengan s, dan jika perbandingan == 0, 692 01:06:17,240 --> 01:06:21,650 strcmp berlaku untuk membawa 0 jika perlawanan telah dibuat. 693 01:06:21,650 --> 01:06:31,510 Jadi, jika ia adalah 0, maka kita boleh mencetak f, dipadankan, 694 01:06:31,510 --> 01:06:35,370 atau perkataan ada di dalam kamus, atau apa sahaja yang anda mahu untuk mencetak f. 695 01:06:35,370 --> 01:06:41,450 Dan kemudian kita tidak mahu untuk menutup f berulang-ulang kali. 696 01:06:41,450 --> 01:06:50,410 Ini adalah jenis perkara yang ingin kita lakukan, dan kita tidak hanya mencari perkataan di dalam kamus. 697 01:06:50,410 --> 01:06:56,660 Jadi kita boleh lakukan itu, jika kita mahu mencari corak, mereka cissa, seperti yang anda katakan sebelum ini, 698 01:06:56,660 --> 01:07:00,260 jika kita mahu mencari corak yang, maka ia akan gagal dalam kes itu 699 01:07:00,260 --> 01:07:08,010 kerana itu bukan sebenarnya perkataan, tetapi salah satu perkataan di dalam kamus yang berlaku untuk mempunyai yang di dalamnya. 700 01:07:08,010 --> 01:07:13,560 Jadi ia akan sepadan dengan perkataan ini, tetapi ini subset perkataan tidak adalah perkataan itu sendiri. 701 01:07:13,560 --> 01:07:17,250 Tetapi itu bukan bagaimana kita menggunakan ia; kita membaca dalam setiap perkataan 702 01:07:17,250 --> 01:07:19,740 dan kemudian membandingkan perkataan yang kita mempunyai dengan perkataan itu. 703 01:07:19,740 --> 01:07:25,780 Jadi kita sentiasa membandingkan perkataan yang penuh. 704 01:07:25,780 --> 01:07:29,620 Saya boleh menghantar penyelesaian dimuktamadkan kemudian. 705 01:07:29,620 --> 01:07:32,050 Ini adalah jenis hampir jawapan yang betul, saya fikir. 706 01:07:32,050 --> 01:07:34,720 [Pelajar komen, difahami] 707 01:07:34,720 --> 01:07:40,870 Oh, adakah saya menghilangkan bahawa sebelum? Char s, saya rasa kita berkata 127 - saya terlupa apa yang terbesar adalah. 708 01:07:40,870 --> 01:07:44,100 Kami hanya akan melakukan 128; jadi sekarang s cukup panjang. 709 01:07:44,100 --> 01:07:46,570 Kita tidak perlu untuk mencetak apa-apa. 710 01:07:46,570 --> 01:07:56,440 Kami juga akan mahu mempunyai untuk menutup fail kita, dan yang perlu tentang jawapan yang betul. 711 01:07:56,440 --> 01:07:59,440 CS50.TV