1 00:00:00,000 --> 00:00:00,980 2 00:00:00,980 --> 00:00:04,410 >> [音乐播放] 3 00:00:04,410 --> 00:00:11,147 4 00:00:11,147 --> 00:00:12,230 戴维·J·马兰:好吧。 5 00:00:12,230 --> 00:00:16,440 这是CS50,这 是第2周的端部。 6 00:00:16,440 --> 00:00:18,480 所以,今天,我们要 继续我们的样子 7 00:00:18,480 --> 00:00:21,150 我们是如何表现的东西 下面的hood--搬走 8 00:00:21,150 --> 00:00:23,520 从喜欢整数的数字 和浮点值 9 00:00:23,520 --> 00:00:26,810 并专注于字符串和 最终更有趣的节目。 10 00:00:26,810 --> 00:00:30,140 但是,我们也将看看在 夫妇域专用problems--的 11 00:00:30,140 --> 00:00:33,620 其中第一个将在 是涉及到密码学中, 12 00:00:33,620 --> 00:00:36,570 艺术加扰的信息, 你上面的看这里 13 00:00:36,570 --> 00:00:41,480 是无线电孤儿安妮的图片 秘密的解码器环从昔日。 14 00:00:41,480 --> 00:00:46,490 >> 其实,这是很原始的形式 和cryptopgraphy儿童友好的形式 15 00:00:46,490 --> 00:00:50,590 由此该环有两个disks-- 1内1外。 16 00:00:50,590 --> 00:00:54,740 并通过旋转其中的一个,就可以 本质上线像一个字母 17 00:00:54,740 --> 00:00:59,520 到Z与其他字母 像通过A.乙换句话说, 18 00:00:59,520 --> 00:01:03,730 你可以从字面上旋转的字母, 从而想出的一个映射 19 00:01:03,730 --> 00:01:07,820 信件,信件,这样,如果你 想送一个秘密消息 20 00:01:07,820 --> 00:01:11,820 到有人喜欢安妮,你可以写 您的消息,然后旋转 21 00:01:11,820 --> 00:01:15,370 字母,即,如果您的意思是 说“A”,而不是你说的“B” 22 00:01:15,370 --> 00:01:17,280 你的意思是说“B” 你不是说“C” - 23 00:01:17,280 --> 00:01:20,240 或一些更聪明 比that--然后,最终 24 00:01:20,240 --> 00:01:24,630 只要安妮有此解码器 环,她可以解码该消息。 25 00:01:24,630 --> 00:01:28,540 现在,你可能还记得,其实,这 在一个非常有名的电影,是使用 26 00:01:28,540 --> 00:01:31,140 在播放广告nauseum 圣诞季节。 27 00:01:31,140 --> 00:01:32,650 让我们来看看这里。 28 00:01:32,650 --> 00:01:35,294 29 00:01:35,294 --> 00:01:37,210 拉尔夫PARKER:“无论是 众所周知,在汇总 30 00:01:37,210 --> 00:01:41,000 拉尔夫·帕克兹委任 小孤儿安妮秘密的一员 31 00:01:41,000 --> 00:01:44,860 圆,有权全部 其发生的荣誉和利益。“ 32 00:01:44,860 --> 00:01:47,410 >> 拉尔夫·帕克(话外音): 签名小孤儿安妮。 33 00:01:47,410 --> 00:01:50,070 会签,皮埃尔·安德烈! 34 00:01:50,070 --> 00:01:51,490 在油墨。 35 00:01:51,490 --> 00:01:55,494 荣誉和利益, 已经在九岁的时候。 36 00:01:55,494 --> 00:01:57,402 >> [音乐播放] 37 00:01:57,402 --> 00:02:00,470 >> [无线电聊天] 38 00:02:00,470 --> 00:02:01,470 拉尔夫PARKER:来吧。 39 00:02:01,470 --> 00:02:02,344 让我们开始吧。 40 00:02:02,344 --> 00:02:06,029 我不需要所有的爵士乐 关于走私者和海盗。 41 00:02:06,029 --> 00:02:08,820 播音员:听明天 晚上的最后冒险 42 00:02:08,820 --> 00:02:11,060 的黑色海盗船。 43 00:02:11,060 --> 00:02:14,740 现在,是时候让安妮 秘密信息给你的成员 44 00:02:14,740 --> 00:02:17,110 的秘密圈。 45 00:02:17,110 --> 00:02:20,700 记住孩子,只有会员 安妮的秘密圈 46 00:02:20,700 --> 00:02:23,270 可以解码安妮的秘密信息。 47 00:02:23,270 --> 00:02:27,270 >> 请记住,安妮取决于你。 48 00:02:27,270 --> 00:02:30,060 设置您的销到B-2。 49 00:02:30,060 --> 00:02:34,004 这里是message-- 12,11,2-- 50 00:02:34,004 --> 00:02:36,503 拉尔夫·帕克(话外音):我 我在我的第一次秘密会晤。 51 00:02:36,503 --> 00:02:40,041 电台播音员:--25,14,11,18,16-- 52 00:02:40,041 --> 00:02:42,790 拉尔夫·帕克(话外音):哦, 皮埃尔是伟大的声音在今晚。 53 00:02:42,790 --> 00:02:46,110 我可以告诉大家,今晚的 信息是非常重要的。 54 00:02:46,110 --> 00:02:47,930 >> 电台播音员:--3,25。 55 00:02:47,930 --> 00:02:49,940 这是从伊能静自己的消息。 56 00:02:49,940 --> 00:02:52,182 记住,不要告诉任何人。 57 00:02:52,182 --> 00:02:55,077 >> [喘气] 58 00:02:55,077 --> 00:02:57,285 拉尔夫·帕克(话外音): 90秒后,我 59 00:02:57,285 --> 00:03:00,090 在唯一的房间 房子里的9个孩子 60 00:03:00,090 --> 00:03:04,380 可以坐在隐私和解码。 61 00:03:04,380 --> 00:03:04,990 啊。 62 00:03:04,990 --> 00:03:05,680 “B”。 63 00:03:05,680 --> 00:03:06,524 >> [笑] 64 00:03:06,524 --> 00:03:08,684 >> 拉尔夫·帕克(话外音): 我去到下一个。 65 00:03:08,684 --> 00:03:09,610 “E”。 66 00:03:09,610 --> 00:03:11,641 第一个字是“是”。 67 00:03:11,641 --> 00:03:12,140 是的! 68 00:03:12,140 --> 00:03:14,293 现在来了更容易。 69 00:03:14,293 --> 00:03:15,259 “U”。 70 00:03:15,259 --> 00:03:16,225 >> [笑] 71 00:03:16,225 --> 00:03:18,157 >> RANDY PARKER:噢,来吧,拉尔夫。 72 00:03:18,157 --> 00:03:19,606 我得走了! 73 00:03:19,606 --> 00:03:21,538 >> 拉尔夫PARKER:我马上下来,马。 74 00:03:21,538 --> 00:03:22,504 啧啧飕飕。 75 00:03:22,504 --> 00:03:25,402 76 00:03:25,402 --> 00:03:31,220 “T” “O”。 “一定 以“。”一定要“是什么? 77 00:03:31,220 --> 00:03:33,981 什么是小孤儿安妮 想说什么? “一定要”是什么? 78 00:03:33,981 --> 00:03:35,522 母亲:拉尔夫,兰迪得走了。 79 00:03:35,522 --> 00:03:36,735 请你出来? 80 00:03:36,735 --> 00:03:38,190 >> 拉尔夫PARKER:好吧,妈​​妈! 81 00:03:38,190 --> 00:03:39,787 我马上就出来了! 82 00:03:39,787 --> 00:03:41,995 拉尔夫·帕克(话外音): 我越来越近了。 83 00:03:41,995 --> 00:03:43,370 张力是可怕的。 84 00:03:43,370 --> 00:03:44,794 那是什么? 85 00:03:44,794 --> 00:03:47,656 地球的命运 可以挂在平衡。 86 00:03:47,656 --> 00:03:50,518 >> 母亲:拉尔夫,兰迪的得走了! 87 00:03:50,518 --> 00:03:53,635 >> 拉尔夫PARKER:我马上就 出来,哭出声来! 88 00:03:53,635 --> 00:03:55,343 拉尔夫PARKER (话外音):几乎没有! 89 00:03:55,343 --> 00:03:56,520 我的手指飞了! 90 00:03:56,520 --> 00:03:58,500 我的心是钢的陷阱。 91 00:03:58,500 --> 00:03:59,850 每一个毛孔振动。 92 00:03:59,850 --> 00:04:01,806 这几乎是清楚的! 93 00:04:01,806 --> 00:04:02,773 是的! 94 00:04:02,773 --> 00:04:03,273 是的! 95 00:04:03,273 --> 00:04:03,773 是的! 96 00:04:03,773 --> 00:04:04,740 是的! 97 00:04:04,740 --> 00:04:10,250 >> 拉尔夫PARKER:“一定 喝你的阿华田。“ 98 00:04:10,250 --> 00:04:10,750 阿华田? 99 00:04:10,750 --> 00:04:14,864 100 00:04:14,864 --> 00:04:17,539 à照出的商业? 101 00:04:17,539 --> 00:04:19,439 >> [音乐播放] 102 00:04:19,439 --> 00:04:21,724 >> 拉尔夫PARKER:狗娘养的。 103 00:04:21,724 --> 00:04:23,460 >> (笑) 104 00:04:23,460 --> 00:04:27,070 >> 戴维·J·马兰:所以这则是 惊鸿一瞥的密码是什么 105 00:04:27,070 --> 00:04:29,880 可以为this--à 喝从昔日。 106 00:04:29,880 --> 00:04:30,900 所以简单公告。 107 00:04:30,900 --> 00:04:33,410 如果你是自由的这 周五下午1:15,并会 108 00:04:33,410 --> 00:04:36,610 想加入我们CS50 午餐前往该网址在这里。 109 00:04:36,610 --> 00:04:38,080 先来先服务如常。 110 00:04:38,080 --> 00:04:41,840 但随着时间的推移,我们将确保 大多数人谁愿意参加 111 00:04:41,840 --> 00:04:43,640 可安排明智的。 112 00:04:43,640 --> 00:04:45,170 >> 所以字符串。 113 00:04:45,170 --> 00:04:47,940 我们有Zamyla--人 你现在见过最有可能 114 00:04:47,940 --> 00:04:50,750 在习题集1--的 名字是这样拼写。 115 00:04:50,750 --> 00:04:53,570 并假设你输入她的名字 成计算机程序,是 116 00:04:53,570 --> 00:04:55,710 使用类似的getString。 117 00:04:55,710 --> 00:04:57,890 为了检索 这些按键,怎么 118 00:04:57,890 --> 00:05:01,620 做才好较 字符串,一句话,一个段落, 119 00:05:01,620 --> 00:05:03,960 或多个字母这样的吗? 120 00:05:03,960 --> 00:05:06,790 >> 我们谈最后一次约 整数和问题 121 00:05:06,790 --> 00:05:09,960 出现整数溢出 和浮点值 122 00:05:09,960 --> 00:05:12,190 和问题 出现在精度范围内。 123 00:05:12,190 --> 00:05:16,080 随着弦,我们至少 有一点更灵活 124 00:05:16,080 --> 00:05:17,970 因为strings--刚 在现实天下 - 125 00:05:17,970 --> 00:05:19,790 可以是一个漂亮的任意长度。 126 00:05:19,790 --> 00:05:21,055 很短的,长的漂亮。 127 00:05:21,055 --> 00:05:23,680 但即便如此,我们要 发现电脑有时可以 128 00:05:23,680 --> 00:05:27,200 运行内存不足,甚至没有 存储一个足够大的字符串。 129 00:05:27,200 --> 00:05:30,840 >> 但现在,让我们开始显现 字符串的东西在这些箱子 130 00:05:30,840 --> 00:05:31,340 这里。 131 00:05:31,340 --> 00:05:36,410 所以六个这样的盒,其中每个 代表一个字符或“字符”。 132 00:05:36,410 --> 00:05:40,646 所以记得“字符” - C-H-A-R--是 在C中的内置的数据类型中的一种 133 00:05:40,646 --> 00:05:43,520 这有什么好看的,你可以用 之类的,作为一个构建块, 134 00:05:43,520 --> 00:05:47,880 一块拼图,如果你愿意,形成 较大的数据类型,我们将继续 135 00:05:47,880 --> 00:05:49,410 调用“弦”。 136 00:05:49,410 --> 00:05:53,650 >> 现在,是关于思维有用 这样的事情在这样的字符串? 137 00:05:53,650 --> 00:05:57,720 嗯,事实证明,我们可以 实际利用这种结构 138 00:05:57,720 --> 00:06:01,420 实际访问单个字符 在一个非常简单的方法。 139 00:06:01,420 --> 00:06:04,099 我要继续前进,创造 一个名为“stringzero.c” 140 00:06:04,099 --> 00:06:05,765 但你可以把它叫做任何你愿意的话。 141 00:06:05,765 --> 00:06:08,500 而在球场上的网站是 已经是这个例子中前进, 142 00:06:08,500 --> 00:06:10,430 所以你不需要 输入所有的东西。 143 00:06:10,430 --> 00:06:13,820 >> 而且我要继续前进 和第一次做INT主要作废。 144 00:06:13,820 --> 00:06:15,980 而在几天之内, 我们将开始捉弄分开 145 00:06:15,980 --> 00:06:19,070 虚空是什么在这里,为什么它的 整型旁边主,等等。 146 00:06:19,070 --> 00:06:21,180 但现在,让我们继续 复制粘贴。 147 00:06:21,180 --> 00:06:23,455 >> 我要宣布一个名为s字符串。 148 00:06:23,455 --> 00:06:26,920 而我要的回报 GetString的在任何用户类型。 149 00:06:26,920 --> 00:06:29,170 这将是一个简单的 程序,没有说明, 150 00:06:29,170 --> 00:06:31,336 我只是盲目地 期望用户知道 151 00:06:31,336 --> 00:06:32,600 怎样做才能保持它的简单。 152 00:06:32,600 --> 00:06:34,220 >> 而现在,我将有一个for循环。 153 00:06:34,220 --> 00:06:37,450 我的for循环里面,我 将有INT I变零。 154 00:06:37,450 --> 00:06:40,660 我是,也只是一个惯例, 索引变量计数, 155 00:06:40,660 --> 00:06:42,350 但我可以把这个我想做的事情。 156 00:06:42,350 --> 00:06:46,275 我要做的i小于than--好 Zamyla的名字是6个字母。 157 00:06:46,275 --> 00:06:48,150 所以我要努力 代码那里了。 158 00:06:48,150 --> 00:06:49,730 >> 然后对我有用。 159 00:06:49,730 --> 00:06:53,190 而现在这里面的卷发 括号我会做的printf, 160 00:06:53,190 --> 00:06:55,460 我想打印一个 字符一次。 161 00:06:55,460 --> 00:06:58,227 所以我打算用%下 也许是第一次。 162 00:06:58,227 --> 00:07:00,560 然后,我要打印的每张 性格上自己的路线。 163 00:07:00,560 --> 00:07:02,550 所以我要放 小反斜杠Ñ那里。 164 00:07:02,550 --> 00:07:03,640 关闭股票​​。 165 00:07:03,640 --> 00:07:06,250 >> 现在我想要做的东西在这里。 166 00:07:06,250 --> 00:07:10,610 我想打印出来的 在字符串中的特定字母, 167 00:07:10,610 --> 00:07:13,670 S,因为我遍历 从零上多达六个。 168 00:07:13,670 --> 00:07:17,150 换句话说,我要 打印s的第i个字符。 169 00:07:17,150 --> 00:07:18,420 现在我该怎么办呢? 170 00:07:18,420 --> 00:07:21,550 >> 嗯很像箱子 这表示在这里, 171 00:07:21,550 --> 00:07:25,560 种,想起了拳击的概念 在信中,您同样可以做到这一点 172 00:07:25,560 --> 00:07:32,630 语法简单的通过指定在C中, 我想打印输出S的第i个字符。 173 00:07:32,630 --> 00:07:35,640 使用方括号 您的计算机键盘上 174 00:07:35,640 --> 00:07:38,910 在美式键盘上的 一般在你的返回键。 175 00:07:38,910 --> 00:07:42,630 >> 因此,这是不完全正确 然而,正如你可能已经注意到了。 176 00:07:42,630 --> 00:07:44,780 不过,我要种 一味地在这里开拓进取。 177 00:07:44,780 --> 00:07:47,020 而我要做的事情做出字符串0。 178 00:07:47,020 --> 00:07:50,860 但我没有这样做的,如果让我们看看 无法预料的一些常见的错误。 179 00:07:50,860 --> 00:07:52,844 这是怎么回事编译? 180 00:07:52,844 --> 00:07:54,510 不,我错过了一大堆东西。 181 00:07:54,510 --> 00:07:55,280 图书馆听说。 182 00:07:55,280 --> 00:07:58,480 >> 那么,哪头文件 我可能要在这里补充的吗? 183 00:07:58,480 --> 00:07:59,205 是啊。 184 00:07:59,205 --> 00:08:01,580 >> 听众:您需要 标准I / O [听不清] 185 00:08:01,580 --> 00:08:02,663 >> 戴维·J·马兰:优秀。 186 00:08:02,663 --> 00:08:06,060 所以,我需要标准I / O。为了什么 这样做的目的我想标准的I / O? 187 00:08:06,060 --> 00:08:06,670 对于printf的。 188 00:08:06,670 --> 00:08:09,220 所以,包含了stdio.h。 189 00:08:09,220 --> 00:08:13,490 你也建议我加入 在CS50的图书馆是什么原因呢? 190 00:08:13,490 --> 00:08:14,650 有字符串。 191 00:08:14,650 --> 00:08:17,780 所以我们会看到什么 CS50的图书馆正在做 192 00:08:17,780 --> 00:08:19,260 创建一个字符串的这个概念。 193 00:08:19,260 --> 00:08:21,930 但现在,你可以认为 它作为一个实际的数据类型。 194 00:08:21,930 --> 00:08:23,596 >> 因此,这似乎是一点点清理。 195 00:08:23,596 --> 00:08:27,060 现在我要继续前进 确实做到让字符串0。 196 00:08:27,060 --> 00:08:27,700 编译。 197 00:08:27,700 --> 00:08:28,370 所以这是很好的。 198 00:08:28,370 --> 00:08:32,799 所以./string0让我放大,使我们可以 看到更加紧密地发生了什么。 199 00:08:32,799 --> 00:08:33,850 输入。 200 00:08:33,850 --> 00:08:37,789 Z-à-M-Y-L-A输入。 201 00:08:37,789 --> 00:08:39,440 我们已经印出来Zamyla的名字。 202 00:08:39,440 --> 00:08:40,409 >> 所以这是相当不错的。 203 00:08:40,409 --> 00:08:43,220 所以,现在让我们继续前进, 再次运行此程序, 204 00:08:43,220 --> 00:08:45,659 并输入了Daven的全名。 205 00:08:45,659 --> 00:08:46,450 惊喜,惊喜。 206 00:08:46,450 --> 00:08:48,021 输入。 207 00:08:48,021 --> 00:08:48,520 嗯。 208 00:08:48,520 --> 00:08:51,750 我们没有印刷Daven的 全名字正确。 209 00:08:51,750 --> 00:08:54,250 现在,这应该是显而易见的 回想起来的原因是什么, 210 00:08:54,250 --> 00:08:57,010 样的,愚蠢的设计决定? 211 00:08:57,010 --> 00:08:59,590 >> 是啊,我硬编码了 6里面我的for循环。 212 00:08:59,590 --> 00:09:01,610 现在我这样做只是因为 我知道Zamyla的名字 213 00:09:01,610 --> 00:09:02,776 将是六个字母。 214 00:09:02,776 --> 00:09:04,720 但可以肯定这不是 一般的解决方案。 215 00:09:04,720 --> 00:09:07,720 所以,事实证明,我们可以动态 找出一个字符串的长度 216 00:09:07,720 --> 00:09:10,440 通过调用一个名为的strlen函数。 217 00:09:10,440 --> 00:09:12,840 >> 同样,故意 简洁的命名只是 218 00:09:12,840 --> 00:09:14,450 以使其更方便地输入。 219 00:09:14,450 --> 00:09:17,170 但是,这等同于 得到一个字符串的长度。 220 00:09:17,170 --> 00:09:23,190 我将返回到我的终端 窗口并重新编译运行。 221 00:09:23,190 --> 00:09:24,170 但它吼我。 222 00:09:24,170 --> 00:09:29,130 隐式声明的库函数 strlen的使用unsigned int型const-- 223 00:09:29,130 --> 00:09:29,780 我迷路了。 224 00:09:29,780 --> 00:09:30,590 完全。 225 00:09:30,590 --> 00:09:32,940 >> 因此,特别是作为 眼神开始呆滞 226 00:09:32,940 --> 00:09:36,000 像这样的错误信息,重点 老老实实的前几个字。 227 00:09:36,000 --> 00:09:38,590 我们知道问题出在 8号线,如下所示。 228 00:09:38,590 --> 00:09:40,500 而且它是在字符串0.c。 229 00:09:40,500 --> 00:09:43,580 隐式声明 库函数strlen的。 230 00:09:43,580 --> 00:09:47,000 使一般要 是错误消息的格局。 231 00:09:47,000 --> 00:09:49,190 隐式声明的东西。 232 00:09:49,190 --> 00:09:53,250 >> 因此,在短期,你有什么我似乎 这样做就线8条,在这里。 233 00:09:53,250 --> 00:09:56,880 什么可能的解决方案是偶数 如果你从来没有使用strlen的自己吗? 234 00:09:56,880 --> 00:09:58,907 >> 听众:不同的库中的一部分? 235 00:09:58,907 --> 00:10:00,740 戴维·J·马兰:第一部分 不同的库。 236 00:10:00,740 --> 00:10:02,400 因此,特此声明,可以这么说。 237 00:10:02,400 --> 00:10:07,510 它提到了一些文件 比stdio.h中和CS50.h.其他 238 00:10:07,510 --> 00:10:09,179 现在它在哪儿定义的? 239 00:10:09,179 --> 00:10:12,220 说实话,你要么只是 知道这一关你的头顶, 240 00:10:12,220 --> 00:10:13,640 或者你google一下,看看。 241 00:10:13,640 --> 00:10:18,150 或者知道这一点,我已经打开了,在CS50 设备上的终端程序,这 242 00:10:18,150 --> 00:10:22,200 是只大,全屏版 什么是gedit中的窗口的底部。 243 00:10:22,200 --> 00:10:24,970 >> 而事实证明,有一个 同样简洁的命令,称为 244 00:10:24,970 --> 00:10:29,280 男子手册,在那里,如果你键入 一个函数的名称,然后按Enter键, 245 00:10:29,280 --> 00:10:32,240 你会得到相当 神秘的文档。 246 00:10:32,240 --> 00:10:35,299 这只是文字一般 看起来有点像这样。 247 00:10:35,299 --> 00:10:37,090 这是一个有点势不可挡 乍看之下。 248 00:10:37,090 --> 00:10:39,048 但是,坦率地说我要去 让我的目光呆滞 249 00:10:39,048 --> 00:10:41,930 而只专注于部分 我关心的时刻。 250 00:10:41,930 --> 00:10:42,780 >> 这是这样的。 251 00:10:42,780 --> 00:10:45,470 它看起来像结构 东西我很熟悉。 252 00:10:45,470 --> 00:10:48,080 事实上,手册页,所以 说话,会告诉你 253 00:10:48,080 --> 00:10:51,590 在什么头文件中的函数 像strlen的定义。 254 00:10:51,590 --> 00:10:54,170 所以我现在要回去gedit的。 255 00:10:54,170 --> 00:10:59,070 而且我要继续前进, 加上这里的#include 256 00:10:59,070 --> 00:11:00,480 并保存文件。 257 00:11:00,480 --> 00:11:04,300 >> 我要清除屏幕 控制L如果你一直想知道。 258 00:11:04,300 --> 00:11:08,210 而我要重新运行make string.0,编译这个时候。 259 00:11:08,210 --> 00:11:11,790 ./string.0 Zamyla。 260 00:11:11,790 --> 00:11:15,020 这似乎工作让我走 进取,与达文波特重新运行它。 261 00:11:15,020 --> 00:11:15,860 输入。 262 00:11:15,860 --> 00:11:17,730 而这也似乎工作。 263 00:11:17,730 --> 00:11:21,220 >> 因此,我们可以做得比这好一点, 不过,我们可以开始整理东西 264 00:11:21,220 --> 00:11:23,257 最多只是一点点。 265 00:11:23,257 --> 00:11:25,590 我要去实际 下面介绍一件事。 266 00:11:25,590 --> 00:11:28,930 我要继续前进, 它保存在不同的文件。 267 00:11:28,930 --> 00:11:31,770 我要去打电话 此文件string1.c刚 268 00:11:31,770 --> 00:11:34,620 为与代码一致 你可以在网上找到。 269 00:11:34,620 --> 00:11:37,050 >> 让我们集中在 完全相同的代码。 270 00:11:37,050 --> 00:11:39,000 事实证明,我已经 是一种了结 271 00:11:39,000 --> 00:11:42,600 理所当然的是,我的笔记本电脑, 并且反过来,CS50器具 272 00:11:42,600 --> 00:11:47,450 有很多记忆,很多 内存,有很大的空间的字节 273 00:11:47,450 --> 00:11:48,920 我在其中可以存储字符串。 274 00:11:48,920 --> 00:11:53,560 >> 但现实的情况,如果我输入长 够了,够按键, 275 00:11:53,560 --> 00:11:56,170 我可以在理论上类型 在多个字符 276 00:11:56,170 --> 00:11:58,830 比我的电脑 实际拥有的内存。 277 00:11:58,830 --> 00:11:59,830 这是有问题的。 278 00:11:59,830 --> 00:12:03,050 就像一个int只能 算如此之高,从理论上讲, 279 00:12:03,050 --> 00:12:06,600 你只能塞进这么多字 到您的计算机的RAM或随机 280 00:12:06,600 --> 00:12:07,920 存取记忆体。 281 00:12:07,920 --> 00:12:11,140 >> 所以我不得不更好地预测 这个问题,甚至 282 00:12:11,140 --> 00:12:13,660 虽然它可能是一个罕见的 角落里的情况下,可以这么说。 283 00:12:13,660 --> 00:12:15,670 不会发生的时候,可能会发生。 284 00:12:15,670 --> 00:12:18,815 如果它发生,我不 预测和计划吧, 285 00:12:18,815 --> 00:12:20,300 我的程序可以做谁知道。 286 00:12:20,300 --> 00:12:22,220 冻结,死机重启,等等。 287 00:12:22,220 --> 00:12:24,490 一些预期可能会发生。 288 00:12:24,490 --> 00:12:27,120 >> 那么,我该怎么办 现在,今后真的, 289 00:12:27,120 --> 00:12:31,630 之前我曾经盲目 使用一个变量,比如s的 290 00:12:31,630 --> 00:12:36,790 已分配的返回值 其他一些功能如GetString的, 291 00:12:36,790 --> 00:12:40,200 我要确保 它的值是有效的。 292 00:12:40,200 --> 00:12:44,280 所以,我只知道,从已经阅读 CS50的文档的GetString, 293 00:12:44,280 --> 00:12:49,020 最终,我们将会为你在, 该形式返回一个特殊的符号 294 00:12:49,020 --> 00:12:53,610 称为NULL,N-U-L-L中的所有 帽子,一旦出了问题。 295 00:12:53,610 --> 00:12:55,650 >> 所以通常情况下,它返回一个字符串。 296 00:12:55,650 --> 00:12:59,700 但除此之外,如果它返回n-U-L-L-- 我们最终会看到什么是真正的 297 00:12:59,700 --> 00:13:01,790 是指:这只是意味着 坏事发生。 298 00:13:01,790 --> 00:13:05,560 现在,这意味着,就像在刮, 我可以在这里查询的条件在C中, 299 00:13:05,560 --> 00:13:08,830 如果s不等于NULL。 300 00:13:08,830 --> 00:13:11,930 所以,如果你还没有见过这个, 这也就意味着不等于。 301 00:13:11,930 --> 00:13:15,290 >> 所以它的对立面 平等的平等,其中还记得, 302 00:13:15,290 --> 00:13:18,940 从单一的不同 等于,这是分配。 303 00:13:18,940 --> 00:13:23,030 所以如果s不等于 空,才做 304 00:13:23,030 --> 00:13:25,980 我想执行的代码行。 305 00:13:25,980 --> 00:13:28,080 因此,换句话说, 之前,我在潜水盲目 306 00:13:28,080 --> 00:13:30,919 并开始迭代 在S和处理它 307 00:13:30,919 --> 00:13:33,710 就好像它是一个序列 人物,我会先检查, 308 00:13:33,710 --> 00:13:37,900 等一下,是绝对不是 等于这个特殊值,空值? 309 00:13:37,900 --> 00:13:40,030 >> 因为如果是这样,坏的事情都可能发生。 310 00:13:40,030 --> 00:13:43,080 而现在,假设坏事 发生意味着你的程序崩溃, 311 00:13:43,080 --> 00:13:45,070 而且你不一定能恢复。 312 00:13:45,070 --> 00:13:46,800 所以,坦率地说,它看起来丑陋。 313 00:13:46,800 --> 00:13:48,660 种它现在混乱的看了一眼。 314 00:13:48,660 --> 00:13:50,780 但是,这将变得更 不久熟悉。 315 00:13:50,780 --> 00:13:52,920 >> 但我要提出 现在另外一个改进。 316 00:13:52,920 --> 00:13:54,660 这是一个改善的正确性。 317 00:13:54,660 --> 00:13:58,800 我的计划是现在比较正确的,因为 在罕见的情况下,没有足够的记忆体 318 00:13:58,800 --> 00:14:01,180 存在,我会处理这件事, 而我就什么也不做。 319 00:14:01,180 --> 00:14:02,680 至少我不会崩溃。 320 00:14:02,680 --> 00:14:05,000 >> 但是,让我们做一个最终版本在这​​里。 321 00:14:05,000 --> 00:14:07,690 和一个文件名为string2.c。 322 00:14:07,690 --> 00:14:10,190 我要粘贴 相同的代码只是一瞬间, 323 00:14:10,190 --> 00:14:14,210 而我要强调这 线,11日,在这里,一会儿就好了。 324 00:14:14,210 --> 00:14:18,179 现在的实际情况是,聪明的编译器 像锵能够解决这一问题,我们 325 00:14:18,179 --> 00:14:19,970 幕后 没有我们曾经知道。 326 00:14:19,970 --> 00:14:24,670 但是让我们想想这 从根本上是有问题的设计。 327 00:14:24,670 --> 00:14:29,010 >> 这行代码,当然, 他说,初始化一些变量i为0。 328 00:14:29,010 --> 00:14:30,260 这是非常简单的。 329 00:14:30,260 --> 00:14:34,691 什么又是这样的 声明中,在这里,我有用,在做什么? 330 00:14:34,691 --> 00:14:37,066 我们已经看到过,但我们 没有真正谈论它。 331 00:14:37,066 --> 00:14:37,900 >> 听众:递增岛 332 00:14:37,900 --> 00:14:39,191 >> 戴维·J·马兰:递增岛 333 00:14:39,191 --> 00:14:41,890 因此,在每次迭代中通过 这个循环中,每一个循环中, 334 00:14:41,890 --> 00:14:43,570 你是递增i增加1。 335 00:14:43,570 --> 00:14:45,740 所以它变大,大,和 做大,直到循环终止。 336 00:14:45,740 --> 00:14:46,810 它是如何终止? 337 00:14:46,810 --> 00:14:49,430 那么有这个中间 这是我们以前使用的条件。 338 00:14:49,430 --> 00:14:52,500 你见过在 预排在P组。 339 00:14:52,500 --> 00:14:53,880 >> 但是,这是什么意思吗? 340 00:14:53,880 --> 00:14:58,352 请执行下列操作循环,使 只要i小于什么? 341 00:14:58,352 --> 00:14:59,810 听众:字符串的长度。 342 00:14:59,810 --> 00:15:01,518 戴维·J·马兰:本 长度的字串。 343 00:15:01,518 --> 00:15:04,300 所以它转换很干净 英语在这个意义上。 344 00:15:04,300 --> 00:15:08,810 现在的问题是,每一次我 通过此循环迭代理论上 345 00:15:08,810 --> 00:15:10,000 我在问这个问题。 346 00:15:10,000 --> 00:15:12,250 为i小于s的字符串的长度? 347 00:15:12,250 --> 00:15:14,500 为i小于s的字符串的长度? 348 00:15:14,500 --> 00:15:18,380 >> 现在也是我改变在每次迭代? 349 00:15:18,380 --> 00:15:18,880 是的。 350 00:15:18,880 --> 00:15:19,629 因为+ +的。 351 00:15:19,629 --> 00:15:21,700 所以,每一次迭代i的越来越大。 352 00:15:21,700 --> 00:15:25,411 但为s挺大的,或 较小,或改变在所有? 353 00:15:25,411 --> 00:15:25,910 号 354 00:15:25,910 --> 00:15:30,240 所以在设计方面,其中一个轴 同时,我们试图评估代码 355 00:15:30,240 --> 00:15:32,610 在课堂上,这种感觉有点愚蠢。 356 00:15:32,610 --> 00:15:34,690 >> 就像你从字面上看, 在每一次迭代 357 00:15:34,690 --> 00:15:37,110 这个循环的要求 同样谴责的问题了, 358 00:15:37,110 --> 00:15:40,770 又一次,又一次,和字面 这是永远不会改变的。 359 00:15:40,770 --> 00:15:44,220 至少如果我没有碰s和 试图改变s的内容。 360 00:15:44,220 --> 00:15:46,610 因此,我可以做得比这更好一点。 361 00:15:46,610 --> 00:15:49,530 >> 而我什么都做不 声明只有一个变量i, 362 00:15:49,530 --> 00:15:53,330 但第二个变量我会随意, 但传统上,正调用它。 363 00:15:53,330 --> 00:15:55,940 分配N个相等的 第字符串的长度。 364 00:15:55,940 --> 00:15:59,090 然后在这里,我要 做一个聪明的小优化,使 365 00:15:59,090 --> 00:16:03,460 可以说,在一天结束时 不再是正确的或不正确的少 366 00:16:03,460 --> 00:16:04,260 比以前。 367 00:16:04,260 --> 00:16:05,500 但它是一个更好的设计。 368 00:16:05,500 --> 00:16:09,480 在事实上,我使用 更少的时间,更少的CPU周期,因此 369 00:16:09,480 --> 00:16:14,040 说话,回答同样的 的问题,但只有一次。 370 00:16:14,040 --> 00:16:17,870 >> 上一般的任何问题 改进的原则, 371 00:16:17,870 --> 00:16:21,294 说,程序的效率? 372 00:16:21,294 --> 00:16:21,991 是吗? 373 00:16:21,991 --> 00:16:23,699 听众:你为什么 使用[听不清]? 374 00:16:23,699 --> 00:16:25,760 375 00:16:25,760 --> 00:16:27,010 戴维·J·马兰:好问题。 376 00:16:27,010 --> 00:16:30,690 那么,为什么我们把+ +上月底 í而不是I的开始? 377 00:16:30,690 --> 00:16:33,070 在这种情况下,它具有 没有功能的影响。 378 00:16:33,070 --> 00:16:36,670 而在一般情况下,我倾向于 使用后缀运算符 379 00:16:36,670 --> 00:16:41,750 所以,这是一个更加清楚一点的 至当操作正在发生。 380 00:16:41,750 --> 00:16:46,670 >> 对于那些不熟悉的,还有另一种 语句,让你可以做+ +我。 381 00:16:46,670 --> 00:16:48,747 这些都是功能 在这种情况下,等同 382 00:16:48,747 --> 00:16:51,080 因为没有什么别的 周围的增量。 383 00:16:51,080 --> 00:16:54,435 但是,你能想出 宗和代码行 384 00:16:54,435 --> 00:16:55,810 其中有差别。 385 00:16:55,810 --> 00:16:57,810 所以一般情况下,我们不 甚至谈论这个。 386 00:16:57,810 --> 00:17:00,690 因为坦率地说,它使你的 代码性感,和排序的雨衣, 387 00:17:00,690 --> 00:17:01,776 和更少的字符。 388 00:17:01,776 --> 00:17:04,859 但现实是它的很多困难, 我想,即使我来包装我的脑海 389 00:17:04,859 --> 00:17:07,319 周围有时, 操作的顺序。 390 00:17:07,319 --> 00:17:09,750 所以顺便说一句,如果你 真的不喜欢这样, 391 00:17:09,750 --> 00:17:14,650 即使这是种性感 看,你也可以做I + = 1, 392 00:17:14,650 --> 00:17:18,880 这是对的丑陋版 postfix的增量同样的想法。 393 00:17:18,880 --> 00:17:22,250 >> 我这样说,你 应该取笑它, 394 00:17:22,250 --> 00:17:25,140 但你会看到代码 一些之前长的漂亮。 395 00:17:25,140 --> 00:17:27,160 >> [笑] 396 00:17:27,160 --> 00:17:28,410 >> 戴维·J·马兰:是吗? 397 00:17:28,410 --> 00:17:29,360 是啊。 398 00:17:29,360 --> 00:17:30,480 问题在中间。 399 00:17:30,480 --> 00:17:32,146 >> 听众:你需要说INT N' 400 00:17:32,146 --> 00:17:34,020 戴维·J·马兰:你这样做 不用说INTñ。 401 00:17:34,020 --> 00:17:37,670 所以,因为我们已经说过诠释, 你不必说了一遍。 402 00:17:37,670 --> 00:17:41,820 美中不足的是,n具有以 具有相同的数据类型,因为我。 403 00:17:41,820 --> 00:17:43,310 所以,这只是一个在这里方便。 404 00:17:43,310 --> 00:17:44,058 是啊。 405 00:17:44,058 --> 00:17:47,806 >> 听众:你可以去比 打印字符s支架我又? 406 00:17:47,806 --> 00:17:48,930 戴维·J·马兰:当然可以。 407 00:17:48,930 --> 00:17:52,110 所以%C,从去年召回 时间,只是一个占位符。 408 00:17:52,110 --> 00:17:53,930 这意味着把一个char这里。 409 00:17:53,930 --> 00:17:56,780 反斜杠N,当然,只是 手段把换行符这里。 410 00:17:56,780 --> 00:17:59,540 所以,刚刚离开,现在, 这片新的语法。 411 00:17:59,540 --> 00:18:03,730 这是从字面上说,抢 字符串称为S去得到它 412 00:18:03,730 --> 00:18:06,050 第i个字符,可以这么说。 413 00:18:06,050 --> 00:18:10,590 >> 我一直说的第i个字符 因为在这个循环的每次迭代 414 00:18:10,590 --> 00:18:14,540 这是因为,虽然我们打印 出,头s支架0, 415 00:18:14,540 --> 00:18:15,780 作为一个程序员可能会说。 416 00:18:15,780 --> 00:18:18,680 那么S支架1,则S 支架2,然后是3,然后是4。 417 00:18:18,680 --> 00:18:21,610 当然,它是一个变量, 所以我只是表达它与I。 418 00:18:21,610 --> 00:18:23,900 >> 键,虽然是实现, 特别是如果你不 419 00:18:23,900 --> 00:18:26,358 被驯化了这个世界 编程时,我们都 420 00:18:26,358 --> 00:18:28,950 似乎从零来算,得 现在就开始从零计数。 421 00:18:28,950 --> 00:18:35,130 因为字符串,第一个字符时, ž在Zamyla是好还是坏 422 00:18:35,130 --> 00:18:40,490 要住在的位置数为零。 423 00:18:40,490 --> 00:18:48,210 >> 好吧,让我带 我们回到这里Zamyla 424 00:18:48,210 --> 00:18:50,746 看看到底发生了什么 在引擎盖下方。 425 00:18:50,746 --> 00:18:52,370 因此,有型铸造这个概念。 426 00:18:52,370 --> 00:18:53,800 你可能有实际 玩这个已经, 427 00:18:53,800 --> 00:18:55,970 也许对黑客 的P版的设定之一。 428 00:18:55,970 --> 00:19:00,320 但是,类型转换只是指 在C和能力的其他语言 429 00:19:00,320 --> 00:19:03,170 到一种数据类型转换成另一种。 430 00:19:03,170 --> 00:19:05,450 >> 现在怎么可能,我们看到这个 很直截了当? 431 00:19:05,450 --> 00:19:08,530 所以这一点,召回,是开始 的英文字母。 432 00:19:08,530 --> 00:19:11,265 和上下文,还记得,从 就像一个星期前是ASCII码。 433 00:19:11,265 --> 00:19:13,790 美国标准守则 信息交换。 434 00:19:13,790 --> 00:19:17,080 这只是一个很长的路要走 的说法,从字母的映射 435 00:19:17,080 --> 00:19:19,370 为数字,从数字到字母。 436 00:19:19,370 --> 00:19:22,940 >> 因此通过并购在这里,点点 点,线了,召回, 437 00:19:22,940 --> 00:19:25,582 十进制数65就到了。 438 00:19:25,582 --> 00:19:27,290 我们没有谈 这个明确的, 439 00:19:27,290 --> 00:19:29,850 但肯定有相似 数字为小写字母。 440 00:19:29,850 --> 00:19:30,820 事实上,有。 441 00:19:30,820 --> 00:19:33,730 世界决定有些年头 以前,小A,小写, 442 00:19:33,730 --> 00:19:35,020 将是97。 443 00:19:35,020 --> 00:19:38,010 和小B是怎么回事 为98,依此类推。 444 00:19:38,010 --> 00:19:40,200 >> 和任何其他关键 您的键盘,还有 445 00:19:40,200 --> 00:19:42,190 会是位类似的模式。 446 00:19:42,190 --> 00:19:44,540 或者等价地,一个十进制数。 447 00:19:44,540 --> 00:19:47,110 因此,在手头上的问题, 那么,我们怎样才能 448 00:19:47,110 --> 00:19:49,400 其实看到这个引擎盖底下? 449 00:19:49,400 --> 00:19:51,539 所以,我打算去到gedit的一次。 450 00:19:51,539 --> 00:19:53,330 而非类型 这一个从无到有, 451 00:19:53,330 --> 00:19:55,330 我要继续前进, 刚刚开放的东西 452 00:19:55,330 --> 00:19:58,350 从今天的代码称为ASCII码为零。 453 00:19:58,350 --> 00:20:01,210 >> 和ASCII零看起来是这样的。 454 00:20:01,210 --> 00:20:02,710 因此,让我们环绕这是我们的想法。 455 00:20:02,710 --> 00:20:04,969 因此,首先,我已经评论 代码,这是很好的。 456 00:20:04,969 --> 00:20:07,010 因为它的字面意思 告诉我会发生什么, 457 00:20:07,010 --> 00:20:08,950 显示大写字母的映射。 458 00:20:08,950 --> 00:20:13,690 现在,我不太知道我 那是什么意思,所以让我们推断。 459 00:20:13,690 --> 00:20:16,870 >> 在英语中,也许 有些技术人员英语, 460 00:20:16,870 --> 00:20:20,660 什么呢行18出现 在做我们呢? 461 00:20:20,660 --> 00:20:21,500 就在第18行。 462 00:20:21,500 --> 00:20:22,430 它是什么引起? 463 00:20:22,430 --> 00:20:25,192 什么是它要在这里揭开序幕? 464 00:20:25,192 --> 00:20:26,100 >> 听众:一个循环。 465 00:20:26,100 --> 00:20:26,630 >> 戴维·J·马兰:一个循环。 466 00:20:26,630 --> 00:20:28,463 又有多少次是 要去迭代? 467 00:20:28,463 --> 00:20:31,562 468 00:20:31,562 --> 00:20:33,270 听众:[插入VOICES] 六次。 469 00:20:33,270 --> 00:20:34,830 戴维·J·马兰:不六倍。 470 00:20:34,830 --> 00:20:35,840 听众:26次。 471 00:20:35,840 --> 00:20:36,560 戴维·J·马兰:26次。 472 00:20:36,560 --> 00:20:37,060 是啊,对不起。 473 00:20:37,060 --> 00:20:37,960 26倍。 474 00:20:37,960 --> 00:20:38,460 为什么呢? 475 00:20:38,460 --> 00:20:41,590 嗯,这是一个有点怪异,但 我已经开始从65计数。 476 00:20:41,590 --> 00:20:43,300 这是奇怪的,但不是错了。 477 00:20:43,300 --> 00:20:44,610 这不是每个说不好。 478 00:20:44,610 --> 00:20:46,980 而我做的,只有 因为,在这个例子中, 479 00:20:46,980 --> 00:20:50,455 我有点期待 资本A为65。 480 00:20:50,455 --> 00:20:53,330 现在这不是最优雅 的方式来做到这一点,来样硬编码 481 00:20:53,330 --> 00:20:56,130 深奥的价值观,没有人 是意想不到的记忆。 482 00:20:56,130 --> 00:21:00,155 >> 但是现在,请注意,我 这样做起来,通过65加26。 483 00:21:00,155 --> 00:21:03,030 因为显然我什至不希望 做算术在我的脑海。 484 00:21:03,030 --> 00:21:04,440 因此,我将让编译器做。 485 00:21:04,440 --> 00:21:08,600 但是在每个循环中,每次迭代 循环的,我递增岛 486 00:21:08,600 --> 00:21:10,196 >> 所以,现在这个看起来有点神秘。 487 00:21:10,196 --> 00:21:13,320 但是,我们应该具备的基本建筑 与块明白这一点。 488 00:21:13,320 --> 00:21:15,510 %C只是一个占位符字符。 489 00:21:15,510 --> 00:21:19,010 %i是一个占位符,一个int。 490 00:21:19,010 --> 00:21:23,310 而事实证明,通过使用该 新的语法,这个括号,所以 491 00:21:23,310 --> 00:21:26,100 可以说,这样的数据类型 圆括号内, 492 00:21:26,100 --> 00:21:32,270 我可以强制编译器把 我岂不是一个整数,但作为一个字符。 493 00:21:32,270 --> 00:21:35,520 >> 从而表明了我的性格 相当于这个数字的。 494 00:21:35,520 --> 00:21:37,986 现在到这里,这个代码 几乎是相同的。 495 00:21:37,986 --> 00:21:39,860 我只是想让 超清晰的事实 496 00:21:39,860 --> 00:21:42,095 那我开始在97, 这是小写。 497 00:21:42,095 --> 00:21:44,080 在经过了26个字母。 498 00:21:44,080 --> 00:21:46,970 而我doing--一遍, 铸我可以这么说。 499 00:21:46,970 --> 00:21:49,160 或类型转换我可以这么说。 500 00:21:49,160 --> 00:21:51,420 >> 从一个int为char。 501 00:21:51,420 --> 00:21:55,760 这样最终的结果将是, 坦率地说,我们的信息已经知道了。 502 00:21:55,760 --> 00:21:59,411 我要作 ASCII-0 dot--不是C点。 503 00:21:59,411 --> 00:22:02,160 请注意,你可能做了 错误,因为我只是做了意外。 504 00:22:02,160 --> 00:22:03,820 请ASCII-0。 505 00:22:03,820 --> 00:22:06,090 现在我该怎么办./ascii-0。 506 00:22:06,090 --> 00:22:09,050 我就放大了,可惜 它会在屏幕上滚过。 507 00:22:09,050 --> 00:22:15,060 但是我们看到整个图上 Google地图97,B映射到98, 508 00:22:15,060 --> 00:22:18,931 如果我们进一步向上滚动 A,当然,映射到65。 509 00:22:18,931 --> 00:22:21,180 所以这只是说 我们一直在鼓吹, 510 00:22:21,180 --> 00:22:25,310 有这个对等,是 事实上在实际的情况。 511 00:22:25,310 --> 00:22:28,000 所以这是一个快速修改。 512 00:22:28,000 --> 00:22:31,220 让我打开ASCII-1.C。 513 00:22:31,220 --> 00:22:38,070 并请注意这个聪明,排序 的,澄清这一点。 514 00:22:38,070 --> 00:22:41,770 这是ASCII-1.C,并 看到这个疯狂的事情。 515 00:22:41,770 --> 00:22:45,120 >> 这真正得到的心脏 什么样的电脑在干什么。 516 00:22:45,120 --> 00:22:48,150 虽然我们人类会 在letters--而言不算 517 00:22:48,150 --> 00:22:50,380 我不开始思考, 没事A则B, 518 00:22:50,380 --> 00:22:52,590 并使用它们来计算物体。 519 00:22:52,590 --> 00:22:58,680 你当然可以说,我要 初始化一些变量称为C-- 520 00:22:58,680 --> 00:23:03,220 但我可以把这种现象称之为anything-- 所以C初始化为资本A. 521 00:23:03,220 --> 00:23:07,560 >> 因为在一天结束时,计算机 不在乎你存储的东西, 522 00:23:07,560 --> 00:23:10,170 只在乎你怎么想 呈现这些信息。 523 00:23:10,170 --> 00:23:13,560 你怎么要电脑 解读比特的格局? 524 00:23:13,560 --> 00:23:16,320 因此,这是不是我 一般会建议这样做。 525 00:23:16,320 --> 00:23:19,500 这真的只是一个例子, 传达你绝对可以 526 00:23:19,500 --> 00:23:22,049 初始化为char整数。 527 00:23:22,049 --> 00:23:24,090 由于下方的 当然,一个char的引擎盖, 528 00:23:24,090 --> 00:23:26,170 仅仅是一个数字,从0到255。 529 00:23:26,170 --> 00:23:28,540 >> 所以,你当然可以 把它放在一个int内。 530 00:23:28,540 --> 00:23:30,890 什么这也 表明的是,我们 531 00:23:30,890 --> 00:23:34,040 可以从一个转换 键入到另一个,在这里, 532 00:23:34,040 --> 00:23:36,780 最终打印同样的事情。 533 00:23:36,780 --> 00:23:44,760 而事实上,这一点,我会解决online-- 是为了这么一说,再一次,在这里。 534 00:23:44,760 --> 00:23:48,610 让我打扫一下网络,我们将 看到在网上漫游的需要, 535 00:23:48,610 --> 00:23:50,280 目的是什么在那里。 536 00:23:50,280 --> 00:23:50,960 >> 行。 537 00:23:50,960 --> 00:23:53,892 所以最后一个例子,现在涉及 A和B的,然后我们会 538 00:23:53,892 --> 00:23:54,850 拿东西了一个档次。 539 00:23:54,850 --> 00:23:58,330 因此,与A和B的并 C'S的资本 540 00:23:58,330 --> 00:24:01,560 和等价物,让我们 看看这个例子,在这里。 541 00:24:01,560 --> 00:24:02,752 另一个代码示例。 542 00:24:02,752 --> 00:24:04,460 我们会开一个的 已经作出,所以我们 543 00:24:04,460 --> 00:24:06,440 不必键入它 全力以赴从零开始。 544 00:24:06,440 --> 00:24:09,420 >> 并注意在期待 我们使用多个头 545 00:24:09,420 --> 00:24:13,240 文件,其中之一是 我们的新朋友,string.h中。 546 00:24:13,240 --> 00:24:15,597 现在这看起来,在第一 一眼望去,有点神秘。 547 00:24:15,597 --> 00:24:18,180 但是,让我们看看,如果我们不能理性 通过什么是怎么回事。 548 00:24:18,180 --> 00:24:21,150 首先,我从用户得到一个字符串, 我把该字符串中的变量 549 00:24:21,150 --> 00:24:22,286 称为S。 550 00:24:22,286 --> 00:24:24,090 复制粘贴,从之前。 551 00:24:24,090 --> 00:24:27,250 在第22行,我显然 做什么 552 00:24:27,250 --> 00:24:30,760 我做了一个刚才我遍历 在s中的字符。 553 00:24:30,760 --> 00:24:34,780 >> 这里的新花样使用 字符串的长度,优化未成年人 554 00:24:34,780 --> 00:24:37,930 存储该字符串的长度为n, 而不是调用一次strlen的, 555 00:24:37,930 --> 00:24:38,850 又一次,又一次。 556 00:24:38,850 --> 00:24:41,120 而只是检查我是小于n。 557 00:24:41,120 --> 00:24:43,330 现在这里,事情就变得 有点有趣。 558 00:24:43,330 --> 00:24:45,980 但它只是一个应用程序 这种相同的新思路。 559 00:24:45,980 --> 00:24:48,470 什么英语呢 Š支架我代表? 560 00:24:48,470 --> 00:24:51,772 561 00:24:51,772 --> 00:24:54,260 >> 听众:每个计数 人物[听不清]。 562 00:24:54,260 --> 00:24:55,926 >> 戴维·J·马兰:计算每个字符。 563 00:24:55,926 --> 00:24:58,680 甚至更简洁, Š支架我代表的是什么? 564 00:24:58,680 --> 00:25:00,950 你会说。 565 00:25:00,950 --> 00:25:04,084 不要把你当场这里。 566 00:25:04,084 --> 00:25:06,375 >> 听众:Well-- 567 00:25:06,375 --> 00:25:09,500 戴维·J·马兰:所以,如果这个词is--如果 该字符串是Zamyla,这starts-- 568 00:25:09,500 --> 00:25:12,380 听众:--you处理 人物separately-- 569 00:25:12,380 --> 00:25:13,690 戴维·J·马兰:好。 570 00:25:13,690 --> 00:25:14,190 没错。 571 00:25:14,190 --> 00:25:17,940 方括号表示法可以让你 单独访问每个字符, 572 00:25:17,940 --> 00:25:21,120 所以š托架0将是对 字符串中的第一个字符。 573 00:25:21,120 --> 00:25:24,110 š托架1将是 第二,等等。 574 00:25:24,110 --> 00:25:28,050 所以这个问题我问, 这里,在这种条件下是什么? 575 00:25:28,050 --> 00:25:33,984 是S更大的第i个字符 大于或等于小写? 576 00:25:33,984 --> 00:25:36,400 而这是什么意思,在这里, 与双连字号? 577 00:25:36,400 --> 00:25:36,800 听众(合):和。 578 00:25:36,800 --> 00:25:37,210 戴维·J·马兰:和。 579 00:25:37,210 --> 00:25:38,418 这只是相当于此。 580 00:25:38,418 --> 00:25:42,310 而不是在C语言的关键字,你必须 使用时,烦人,符号与符号。 581 00:25:42,310 --> 00:25:47,520 而这一点,相反,却要求是 的s的第i个字符小于或等于 582 00:25:47,520 --> 00:25:49,030 为小写ž? 583 00:25:49,030 --> 00:25:52,440 再次,这里的地方 理解底层 584 00:25:52,440 --> 00:25:54,550 实施了 电脑是有道理的。 585 00:25:54,550 --> 00:25:57,330 请注意,即使我有 在点点点在那边, 586 00:25:57,330 --> 00:26:04,410 貌似从a到z的小写字母 所有连续的值从97上了。 587 00:26:04,410 --> 00:26:07,820 >> 而同样的大写开始65。 588 00:26:07,820 --> 00:26:10,410 因此,外卖,然后, 的是,在英国, 589 00:26:10,410 --> 00:26:12,760 你会如何​​形容 什么线24是干什么的? 590 00:26:12,760 --> 00:26:15,736 591 00:26:15,736 --> 00:26:16,728 是吗? 592 00:26:16,728 --> 00:26:21,575 >> 听众:在24它的检查,看看 是否每一个字符是小写。 593 00:26:21,575 --> 00:26:24,700 戴维·J·马兰:这是检查是否 每个字符是小写字母。 594 00:26:24,700 --> 00:26:28,590 因此,更简洁,是 Š小写的第i个字符? 595 00:26:28,590 --> 00:26:30,690 这就是我们 在这里表达逻辑, 596 00:26:30,690 --> 00:26:33,750 隐晦一点,但 最终很直截了当。 597 00:26:33,750 --> 00:26:36,480 是S的第i个字符小写? 598 00:26:36,480 --> 00:26:40,130 >> 如果是这样,这里的东西在哪里 得到一点心灵弯曲 599 00:26:40,130 --> 00:26:44,760 就一下,如果是的话,请 前进,打印出的字符。 600 00:26:44,760 --> 00:26:47,360 所以这只是一个占位符, 但什么性格? 601 00:26:47,360 --> 00:26:53,710 我为什么要做Š级别I 减去在这里体现在哪里? 602 00:26:53,710 --> 00:26:55,110 >> 那么这里看到的格局。 603 00:26:55,110 --> 00:26:57,380 实际数字并不重要,这么多。 604 00:26:57,380 --> 00:27:02,700 但是请注意,97是 如何远离65? 605 00:27:02,700 --> 00:27:03,560 >> 听众:32。 606 00:27:03,560 --> 00:27:04,480 >> 戴维·J·马兰:32。 607 00:27:04,480 --> 00:27:06,890 多远是98 66? 608 00:27:06,890 --> 00:27:07,740 >> 听众:32。 609 00:27:07,740 --> 00:27:09,890 >> 戴维·J·马兰:从大C小C 2 610 00:27:09,890 --> 00:27:10,420 32。 611 00:27:10,420 --> 00:27:14,550 因此,有来自32跳 一个字母到另一个。 612 00:27:14,550 --> 00:27:17,790 所以,坦白说,我终于忍不住 简化这一点。 613 00:27:17,790 --> 00:27:20,400 但后来我种硬编码 这种低级别的理解 614 00:27:20,400 --> 00:27:21,740 没有读者是有史以来 要理解。 615 00:27:21,740 --> 00:27:25,080 所以我要推广它作为我 知道小写字母越大。 616 00:27:25,080 --> 00:27:28,400 我知道的大写字母 较小的值,具有讽刺意味的​​。 617 00:27:28,400 --> 00:27:33,216 >> 但是这实际上等同于 话说减去32从s支架岛 618 00:27:33,216 --> 00:27:35,430 因此在这些情况下 信,如果信 619 00:27:35,430 --> 00:27:38,950 恰好是一个字母,小写字母 A,我减去32, 620 00:27:38,950 --> 00:27:43,442 什么样的影响确实有, 在数学上,在小写? 621 00:27:43,442 --> 00:27:44,400 听众:Capitalizes-- 622 00:27:44,400 --> 00:27:45,691 戴维·J·马兰:以大写字母了。 623 00:27:45,691 --> 00:27:48,440 事实上,这就是为什么我们的 程序被称为利用零。 624 00:27:48,440 --> 00:27:51,590 这个程序不是 大写字母, 625 00:27:51,590 --> 00:27:54,580 检查它是否是后 的确是一个小写字母。 626 00:27:54,580 --> 00:27:59,810 否则,在第30行,我该怎么办,如果 它不是一个小写字母,我很 627 00:27:59,810 --> 00:28:02,852 看着在特定 迭代循环中。 628 00:28:02,852 --> 00:28:03,890 刚刚打印出来。 629 00:28:03,890 --> 00:28:07,010 >> 所以不改变的东西 这甚至不是小写。 630 00:28:07,010 --> 00:28:10,790 限制自己 通过小Ž稍微。 631 00:28:10,790 --> 00:28:12,730 现在,这是相当神秘的。 632 00:28:12,730 --> 00:28:15,230 但在一天结束时,这 就是我们,曾几何时, 633 00:28:15,230 --> 00:28:16,460 必须实现的事情。 634 00:28:16,460 --> 00:28:19,780 如果我不是开放的资本 1,哦,感谢上帝。 635 00:28:19,780 --> 00:28:22,320 有一个函数 叫上可 636 00:28:22,320 --> 00:28:25,410 难道我们只是做了一切 在一个相当低的水平。 637 00:28:25,410 --> 00:28:28,752 >> 我们上有趣的是, 因为它是在一个文件中声明, 638 00:28:28,752 --> 00:28:31,210 你只知道这个 通过检查文档, 639 00:28:31,210 --> 00:28:35,730 或者被告知,比方说,在课堂上,在那里 它的存在,在一个名为文件ctype.h。 640 00:28:35,730 --> 00:28:37,630 因此,这是我们的一位新朋友。 641 00:28:37,630 --> 00:28:40,750 并且上不正是 它的名字所暗示。 642 00:28:40,750 --> 00:28:44,860 >> 您可以通过在,作为一个参数之间 这些括号,一些字符。 643 00:28:44,860 --> 00:28:48,390 我要传递的第i个字符 第使用我们看中的新符号 644 00:28:48,390 --> 00:28:49,870 包括方括号。 645 00:28:49,870 --> 00:28:53,391 并采取了猜测,究竟是回归 对上价值显然会 646 00:28:53,391 --> 00:28:53,890 要? 647 00:28:53,890 --> 00:28:56,460 648 00:28:56,460 --> 00:28:57,770 大写字母。 649 00:28:57,770 --> 00:28:58,620 大写字母。 650 00:28:58,620 --> 00:29:02,330 >> 所以,如果我通过在小写, 希望,通过对上定义, 651 00:29:02,330 --> 00:29:05,600 它会返回一个 大写字母A。否则, 652 00:29:05,600 --> 00:29:08,590 如果它不是一个小写字母 首先,我只是把它打印出来。 653 00:29:08,590 --> 00:29:10,800 事实上,请注意 这里第二个朋友。 654 00:29:10,800 --> 00:29:13,840 不只是上存在, 但是低,这 655 00:29:13,840 --> 00:29:16,200 实际上回答了这个问题对我来说。 656 00:29:16,200 --> 00:29:19,730 >> 现在,谁写了这些东西, 以前的10秒里,你知道吗? 657 00:29:19,730 --> 00:29:23,840 实施上,是 降低使用这样的代码。 658 00:29:23,840 --> 00:29:27,270 但同样,有一致的 这个想法抽象出来的​​, 659 00:29:27,270 --> 00:29:29,190 之类的,较低水平 实施细则。 660 00:29:29,190 --> 00:29:32,600 而站在人的肩膀上 谁来到了我们面前,使用功能 661 00:29:32,600 --> 00:29:36,300 像到上部和下部是,这 奇妙的是够漂亮 662 00:29:36,300 --> 00:29:40,190 命名该说什么,他们做的是 精彩的范例采用。 663 00:29:40,190 --> 00:29:44,040 >> 现在,事实证明,如果我读 该手册页,说,要上, 664 00:29:44,040 --> 00:29:45,010 我学别的东西。 665 00:29:45,010 --> 00:29:46,890 所以,男人TOUPPER。 666 00:29:46,890 --> 00:29:48,050 这是一个有点势不可挡。 667 00:29:48,050 --> 00:29:51,110 但注意,这里的提 我应该使用头文件。 668 00:29:51,110 --> 00:29:54,460 顺便说一句,因为这 是一种误导,功能 669 00:29:54,460 --> 00:29:59,070 采用整数,而不是字符 错误检查的原因。 670 00:29:59,070 --> 00:30:01,260 但是,我们也许会来 返回到在将来。 671 00:30:01,260 --> 00:30:05,910 >> 但是请注意,在这里,要上转换 如果可能的字母C为大写。 672 00:30:05,910 --> 00:30:07,674 所以这是非常简单的。 673 00:30:07,674 --> 00:30:09,340 现在,让我们成为一个更具体一点。 674 00:30:09,340 --> 00:30:12,750 让我们来看看的部分 根据返回值的手册页。 675 00:30:12,750 --> 00:30:15,420 返回的值是 转换后的字母。 676 00:30:15,420 --> 00:30:18,690 或c,如果转换 是不可能的, 677 00:30:18,690 --> 00:30:20,250 其中c是原始输入。 678 00:30:20,250 --> 00:30:24,140 我知道,从这里,从 该参数来上。 679 00:30:24,140 --> 00:30:25,780 >> 那么什么是这个外卖? 680 00:30:25,780 --> 00:30:28,060 返回的值是 转换的信, 681 00:30:28,060 --> 00:30:32,110 或c,原信,如果 的转化率是不可能的。 682 00:30:32,110 --> 00:30:36,460 有什么可以改进,所以我 让我的代码的设计吗? 683 00:30:36,460 --> 00:30:37,146 是吗? 684 00:30:37,146 --> 00:30:38,810 >> 听众:您可以删除的东西。 685 00:30:38,810 --> 00:30:40,810 戴维·J·马兰:我可以 去掉else语句, 686 00:30:40,810 --> 00:30:42,510 而不仅仅是else语句。 687 00:30:42,510 --> 00:30:44,150 >> 听众:您可以删除[听不清]。 688 00:30:44,150 --> 00:30:46,310 >> 戴维·J·马兰:我可以 移除整个叉 689 00:30:46,310 --> 00:30:48,209 在路上,如果其他人干脆。 690 00:30:48,209 --> 00:30:50,250 因此,我们确实让我打开 这样做的最终版本, 691 00:30:50,250 --> 00:30:55,540 利用-2,注意只是怎么样,如果 你会,性感,代码现在越来越, 692 00:30:55,540 --> 00:31:00,040 在我从一些减少 七,所以行短短四年, 693 00:31:00,040 --> 00:31:03,850 我有意的功能 通过简单地调用到上层, 694 00:31:03,850 --> 00:31:09,410 通过以s支架i和印刷 取出,用占位符%C, 695 00:31:09,410 --> 00:31:11,090 特定的性格。 696 00:31:11,090 --> 00:31:14,560 >> 现在可以说,有个bug, 或错误的,至少风险, 697 00:31:14,560 --> 00:31:15,350 在这个程序中。 698 00:31:15,350 --> 00:31:18,200 所以才回来 到一个较早的外卖, 699 00:31:18,200 --> 00:31:21,820 我应该怎么可能还做的 这个程序,使其更加坚固, 700 00:31:21,820 --> 00:31:24,974 因此,有没有办法它可以 崩溃,甚至在极少数情况下? 701 00:31:24,974 --> 00:31:26,390 听众:请确保它是不是NULL。 702 00:31:26,390 --> 00:31:28,056 戴维·J·马兰:确保它不为NULL。 703 00:31:28,056 --> 00:31:31,030 所以真的,使这个超级 正确的,我应该这样做, 704 00:31:31,030 --> 00:31:35,300 如果s不为NULL,则 请继续执行 705 00:31:35,300 --> 00:31:38,470 这几行代码,其中 那么我可以缩进那样, 706 00:31:38,470 --> 00:31:39,870 然后把我的右花括号。 707 00:31:39,870 --> 00:31:41,550 因此,良好的搭售在一起的两个概念。 708 00:31:41,550 --> 00:31:42,429 是吗? 709 00:31:42,429 --> 00:31:44,470 听众:你能不能用 一个do while循环,而不是? 710 00:31:44,470 --> 00:31:47,270 戴维·J·马兰:莫非 我做了do while循环? 711 00:31:47,270 --> 00:31:50,020 听众:--you要确保 你实际上[听不清]。 712 00:31:50,020 --> 00:31:51,728 戴维·J·马兰:莫非 您使用的是DO WHILE? 713 00:31:51,728 --> 00:31:52,450 简短的回答,没有。 714 00:31:52,450 --> 00:31:54,700 因为你即将 引入另一个角落的情况下。 715 00:31:54,700 --> 00:31:56,660 如果该字符串的长度为零。 716 00:31:56,660 --> 00:31:59,600 如果举例来说,我只是打 输入,而没有输入Zamyla。 717 00:31:59,600 --> 00:32:02,490 我要交给你回一个实际 字符串,因为我们最终会看到, 718 00:32:02,490 --> 00:32:03,780 具有零个字符。 719 00:32:03,780 --> 00:32:05,630 它仍然是一个字符串, 它只是超短。 720 00:32:05,630 --> 00:32:07,960 但是,如果你使用DO WHILE, 你要盲目 721 00:32:07,960 --> 00:32:10,050 尝试做一些与 对于该字符串, 722 00:32:10,050 --> 00:32:12,537 而什么也没有去那里。 723 00:32:12,537 --> 00:32:18,607 >> 听众:嗯,如果你做了 做[听不清],而S-- 724 00:32:18,607 --> 00:32:21,190 戴维·J·马兰:哦,我看看,让 获取来自用户的字符串。 725 00:32:21,190 --> 00:32:23,525 所以,简单的答案,你 能,并保持纠缠 726 00:32:23,525 --> 00:32:26,150 他们给你一个字符串,它是 短到足以装入内存。 727 00:32:26,150 --> 00:32:26,700 当然可以。 728 00:32:26,700 --> 00:32:27,630 我只是选择不。 729 00:32:27,630 --> 00:32:30,505 如果他们不给我的字符串I 希望,我辞职,我放弃了。 730 00:32:30,505 --> 00:32:33,260 但是,绝对,为此目的, 你可以完全做到这一点。 731 00:32:33,260 --> 00:32:37,500 >> 因此,库的头文件 我们现在熟悉了这些,在这里。 732 00:32:37,500 --> 00:32:41,550 标准I / O,CS50.h,string.h中, 文件ctype.h,并有确实,等。 733 00:32:41,550 --> 00:32:44,460 你们当中有些人已经发现 在math.h.数学库 734 00:32:44,460 --> 00:32:48,200 不过,让我介绍一下,现在,到 这个资源是CS50的工作人员,达文, 735 00:32:48,200 --> 00:32:50,630 和Rob,以及加布特别 有放在一起。 736 00:32:50,630 --> 00:32:52,630 这将很快链接 该课程的网站。 737 00:32:52,630 --> 00:32:54,870 这就是所谓的CS50参考。 738 00:32:54,870 --> 00:32:58,230 >> 这只是给你一个快速 它的味道,工作原理如下。 739 00:32:58,230 --> 00:33:00,740 让我去reference.cs50.net。 740 00:33:00,740 --> 00:33:02,990 在左手上,你会看到 方压倒性列表 741 00:33:02,990 --> 00:33:04,595 功能附带℃。 742 00:33:04,595 --> 00:33:07,790 但是,如果我不管,就目前而言, 关于类似的strlen, 743 00:33:07,790 --> 00:33:08,746 我可以输入它。 744 00:33:08,746 --> 00:33:10,870 它过滤下来的名单 只是我所关心的。 745 00:33:10,870 --> 00:33:11,940 我会点击它。 746 00:33:11,940 --> 00:33:14,740 而现在在左边, 你会看到什么,我们希望 747 00:33:14,740 --> 00:33:18,290 是一个比较简单的,人 如何友好的解释 748 00:33:18,290 --> 00:33:19,170 该功能的工作原理。 749 00:33:19,170 --> 00:33:20,600 >> 返回字符串的长度。 750 00:33:20,600 --> 00:33:24,060 这里有一个故事大纲,这里是你如何 用它在头文件而言, 751 00:33:24,060 --> 00:33:27,430 以及在什么样的功能方面 看起来像它的参数条件。 752 00:33:27,430 --> 00:33:30,250 然后在这里,退货 字符串的长度。 753 00:33:30,250 --> 00:33:34,280 但是,对于那些你更舒适, 实际上你可以点击更多的舒适, 754 00:33:34,280 --> 00:33:37,070 与此内容 页,现在,将改变 755 00:33:37,070 --> 00:33:41,660 是什么样的默认值 你所使用的手册页。 756 00:33:41,660 --> 00:33:44,100 >> 换句话说,CS50 引用是一个简化 757 00:33:44,100 --> 00:33:46,220 手册页的工作人员,为学生。 758 00:33:46,220 --> 00:33:49,320 特别是那些不太舒服 和在之间,这样就 759 00:33:49,320 --> 00:33:51,660 不必尝试包裹 你的头脑身边,坦率地说, 760 00:33:51,660 --> 00:33:55,030 一些相当神秘的语法 和文档的某个时候。 761 00:33:55,030 --> 00:33:57,650 >> 所以,记住这一点 在未来的日子里。 762 00:33:57,650 --> 00:33:59,560 所以在这里,再次,是Zamyla。 763 00:33:59,560 --> 00:34:03,255 现在,让我们提出一个问题,那就是 多一点人访问。 764 00:34:03,255 --> 00:34:05,380 由于长安,谁是被 印刷更多的大象 765 00:34:05,380 --> 00:34:07,090 马不停蹄的这几天。 766 00:34:07,090 --> 00:34:09,730 我们有一个机会,给 客场至少其中之一。 767 00:34:09,730 --> 00:34:13,239 如果我们能够得到的只是一名志愿者 来在最多绘制在屏幕上。 768 00:34:13,239 --> 00:34:14,530 怎么在这里? 769 00:34:14,530 --> 00:34:15,340 >> 上来吧。 770 00:34:15,340 --> 00:34:16,720 你叫什么名字? 771 00:34:16,720 --> 00:34:17,219 亚历克斯:亚历克斯。 772 00:34:17,219 --> 00:34:17,760 戴维·J·马兰:亚历克斯。 773 00:34:17,760 --> 00:34:18,259 好吧。 774 00:34:18,259 --> 00:34:19,388 亚历克斯,上来吧。 775 00:34:19,388 --> 00:34:21,679 我们即将看到你 手写在屏幕上的位置。 776 00:34:21,679 --> 00:34:24,325 777 00:34:24,325 --> 00:34:25,570 好吧,很高兴认识你。 778 00:34:25,570 --> 00:34:26,429 >> 亚历克斯:你很高兴见到你。 779 00:34:26,429 --> 00:34:27,512 >> 戴维·J·马兰:好吧。 780 00:34:27,512 --> 00:34:28,969 因此,超级简单的运动。 781 00:34:28,969 --> 00:34:31,440 酒吧是不高 让大象今天。 782 00:34:31,440 --> 00:34:33,439 你在玩的GetString的作用。 783 00:34:33,439 --> 00:34:35,980 而且我会直接告诉你 你已经得到的字符串。 784 00:34:35,980 --> 00:34:38,080 并假设你, GetString的,被称为。 785 00:34:38,080 --> 00:34:42,480 和人,和我一样,有 键入Zamyla,Z-A-M-Y-L-A。 786 00:34:42,480 --> 00:34:45,650 只是继续前进,就写Zamyla 屏幕虽然你得到它 787 00:34:45,650 --> 00:34:47,250 并将其存储在某个地方存储。 788 00:34:47,250 --> 00:34:52,370 789 00:34:52,370 --> 00:34:55,570 >> 什么将是几个留有​​余地 其他words--没关系,坚持下去。 790 00:34:55,570 --> 00:34:59,620 >> [笑] 791 00:34:59,620 --> 00:35:00,800 >> 所以Zamyla,优秀。 792 00:35:00,800 --> 00:35:04,880 所以,现在假设你, GetString的,被再次调用。 793 00:35:04,880 --> 00:35:09,350 因此,我为您提供,在 键盘,使用其他名称,贝琳达。 794 00:35:09,350 --> 00:35:17,560 795 00:35:17,560 --> 00:35:18,060 好吧。 796 00:35:18,060 --> 00:35:22,380 而现在,下一次的GetString是 叫我输入类似加布, 797 00:35:22,380 --> 00:35:27,560 G-A-B-C。你真的走 到心脏的随机存取存储器。 798 00:35:27,560 --> 00:35:29,631 这是借鉴一切 完全随机。 799 00:35:29,631 --> 00:35:30,130 行。 800 00:35:30,130 --> 00:35:31,104 >> [笑] 801 00:35:31,104 --> 00:35:32,520 亚历克斯:对不起,我的笔迹是坏的。 802 00:35:32,520 --> 00:35:33,770 戴维·J·马兰:不,没关系。 803 00:35:33,770 --> 00:35:40,480 又有怎样的罗布,R-O-B。行。 804 00:35:40,480 --> 00:35:41,020 好。 805 00:35:41,020 --> 00:35:43,853 所以,我没想到你会 种打下的东西出来是这样的。 806 00:35:43,853 --> 00:35:45,020 但是,我们可以使这项工作。 807 00:35:45,020 --> 00:35:48,810 那你怎么去铺设 这些字符在内存中? 808 00:35:48,810 --> 00:35:51,310 换句话说,如果我们想 这个长方形的黑色画面 809 00:35:51,310 --> 00:35:53,550 作为代表 计算机的RAM或内存。 810 00:35:53,550 --> 00:35:55,850 >> 并记得RAM是刚 一大堆的字节, 811 00:35:55,850 --> 00:35:57,480 和字节是一大堆位。 812 00:35:57,480 --> 00:35:59,350 而位在某种程度上 实施一般 813 00:35:59,350 --> 00:36:01,119 用某种形式的 电力硬件。 814 00:36:01,119 --> 00:36:03,160 所以这是排序的 分层,我们已经讨论过 815 00:36:03,160 --> 00:36:04,510 现在可以理所当然的。 816 00:36:04,510 --> 00:36:07,020 你怎么去 决定在哪里写 817 00:36:07,020 --> 00:36:11,634 罗布对加布与 贝琳达与Zamyla? 818 00:36:11,634 --> 00:36:14,020 >> 亚历克斯:我只是做了它在 命令你告诉我。 819 00:36:14,020 --> 00:36:15,650 >> 戴维·J·马兰:这是事实。 820 00:36:15,650 --> 00:36:20,100 但管辖,你把 贝琳达的名字和Gabe的名字吗? 821 00:36:20,100 --> 00:36:20,764 >> 亚历克斯:什么都没有? 822 00:36:20,764 --> 00:36:22,930 戴维·J·马兰:[笑] 那么这样的作品,这很好。 823 00:36:22,930 --> 00:36:25,290 所以,电脑是小 比这更有序。 824 00:36:25,290 --> 00:36:29,000 所以,当我们implement--呆在那里 在短短moment--当我们真正 825 00:36:29,000 --> 00:36:31,470 实现类似 GetString的在一台电脑, 826 00:36:31,470 --> 00:36:34,480 Zamyla可能会奠定了相当多 像你这样在屏幕上,在那里。 827 00:36:34,480 --> 00:36:36,660 >> 什么是关键要注意 在这里,有什么亚历克斯做了, 828 00:36:36,660 --> 00:36:40,260 有是怎样的一个分界 其中每一项的话,对不对? 829 00:36:40,260 --> 00:36:46,580 你没写 Z-A-M-Y型L-A-B-C-L-I-N-D-A-G-A-B-- 830 00:36:46,580 --> 00:36:49,740 换句话说,有一些样 划界这似乎是, 831 00:36:49,740 --> 00:36:52,370 之类的,随机的间距 这些不同的单词之间。 832 00:36:52,370 --> 00:36:54,120 但是,这是很好的,因为 我们人类现在可以 833 00:36:54,120 --> 00:36:56,470 可视化,这些都是 四个不同的字符串。 834 00:36:56,470 --> 00:36:59,540 这不只是一个序列 地段字符。 835 00:36:59,540 --> 00:37:04,190 所以一台电脑的话,同时, 可能需要一个字符串,如Zamyla, 836 00:37:04,190 --> 00:37:07,220 把每一个这些信件 里面的内存字节。 837 00:37:07,220 --> 00:37:10,400 不过,这个数字要大得多, 当然,大于6位。 838 00:37:10,400 --> 00:37:11,690 >> 有一大堆的RAM。 839 00:37:11,690 --> 00:37:15,330 所以,从今以后,这 箱格会 840 00:37:15,330 --> 00:37:17,560 代表什么亚历克斯刚 在这里做在屏幕上。 841 00:37:17,560 --> 00:37:20,937 而现在,亚历克斯,我们可以为您提供 蓝色或从长安橙色大象。 842 00:37:20,937 --> 00:37:22,270 亚历克斯:我要一个蓝色的大象。 843 00:37:22,270 --> 00:37:23,120 戴维·J·马兰:一个蓝色的大象。 844 00:37:23,120 --> 00:37:25,580 因此,一个热烈的掌声, 如果我们可以,亚历克斯在这里。 845 00:37:25,580 --> 00:37:26,100 >> [掌声] 846 00:37:26,100 --> 00:37:26,766 >> 亚历克斯:谢谢。 847 00:37:26,766 --> 00:37:28,820 戴维·J·马兰:谢谢。 848 00:37:28,820 --> 00:37:36,230 这样的外卖的是,即使 种模式随时间变化的,在这里 849 00:37:36,230 --> 00:37:40,430 在黑板上,有这 各串之间的分界 850 00:37:40,430 --> 00:37:42,610 亚历克斯得到了我们。 851 00:37:42,610 --> 00:37:45,230 现在的电脑,坦率地说, 可以做同样的事情。 852 00:37:45,230 --> 00:37:48,210 种他们可以噗通 字符串的任何地方在RAM中。 853 00:37:48,210 --> 00:37:50,710 在这里,在这里, 在这儿,在这儿。 854 00:37:50,710 --> 00:37:52,020 >> 他们可以这样做。 855 00:37:52,020 --> 00:37:54,280 但是,当然,这是 可能不是最好的规划。 856 00:37:54,280 --> 00:37:54,780 对不对? 857 00:37:54,780 --> 00:37:57,340 如果我一直在问亚历克斯 得到的名字,也许他会 858 00:37:57,340 --> 00:38:01,370 多放些到这里,也许最多 在这里,看过来,看过来,最终 859 00:38:01,370 --> 00:38:02,211 在这里。 860 00:38:02,211 --> 00:38:05,460 但有更多的规划,当然, 我们可以打好的事情了更干净。 861 00:38:05,460 --> 00:38:07,350 事实上,这就是一台电脑一样。 862 00:38:07,350 --> 00:38:10,720 >> 但美中不足的是, 如果下一个字符串,我得到 863 00:38:10,720 --> 00:38:14,050 后Zamyla是什么 像贝琳达, 864 00:38:14,050 --> 00:38:17,929 建议我们会写 字母b相对于该网格? 865 00:38:17,929 --> 00:38:18,720 你会去哪里? 866 00:38:18,720 --> 00:38:21,480 为a的右侧, 下面的Z,下面有一把? 867 00:38:21,480 --> 00:38:23,204 什么你的第一直觉是什么? 868 00:38:23,204 --> 00:38:24,120 听众:下面的Z。 869 00:38:24,120 --> 00:38:25,100 戴维·J·马兰:所以Z轴下方。 870 00:38:25,100 --> 00:38:26,530 这就是美丽的 简单吧? 871 00:38:26,530 --> 00:38:29,321 这是一种整齐,这是我们做什么 在键盘上,当我们按下回车键, 872 00:38:29,321 --> 00:38:31,770 或电子邮件时作出 物联网项目符号列表。 873 00:38:31,770 --> 00:38:34,310 但现实的情况是,电脑 尝试更有效率, 874 00:38:34,310 --> 00:38:37,170 和补习班肯定之多 数据到RAM成为可能, 875 00:38:37,170 --> 00:38:38,890 这样你就不会浪费任何字节。 876 00:38:38,890 --> 00:38:41,545 这样你就不会浪费 任何屏幕房地产。 877 00:38:41,545 --> 00:38:44,170 与该问题,虽然是 如果我们硬是​​把信 878 00:38:44,170 --> 00:38:49,940 后B A,我们如何来 知道Zamyla的名称结尾 879 00:38:49,940 --> 00:38:51,840 和贝琳达的名字开始? 880 00:38:51,840 --> 00:38:55,270 所以,你们人类只是建议,好了, 按下回车键,基本上。 881 00:38:55,270 --> 00:38:56,410 把它放在楼下。 882 00:38:56,410 --> 00:38:59,750 甚至亚历克斯做了,刚开始写作 低于前一个下一个名称, 883 00:38:59,750 --> 00:39:01,583 和下面的那一个,并 那么下面的那一个。 884 00:39:01,583 --> 00:39:02,510 这是一个视觉提示。 885 00:39:02,510 --> 00:39:05,960 >> 电脑有另一种视觉提示, 但它是一个小更简洁。 886 00:39:05,960 --> 00:39:07,840 正是这种质朴的性格。 887 00:39:07,840 --> 00:39:11,890 反斜线0,这也许是 让人想起反斜杠n个, 888 00:39:11,890 --> 00:39:12,640 等等,现在。 889 00:39:12,640 --> 00:39:14,120 特殊的转义序列。 890 00:39:14,120 --> 00:39:19,120 反斜线0的方式 代表捌零位成一排。 891 00:39:19,120 --> 00:39:22,000 0000 0000。 892 00:39:22,000 --> 00:39:26,130 >> 你表达的方式是不 按键盘上的数字为零, 893 00:39:26,130 --> 00:39:28,140 因为实际上这是一个ASCII字符。 894 00:39:28,140 --> 00:39:30,990 它看起来像一个数字,但 实际上是一个十进制数 895 00:39:30,990 --> 00:39:35,910 表示圆 字形,圆形字体。 896 00:39:35,910 --> 00:39:38,410 同时,反斜线 零表示,从字面上 897 00:39:38,410 --> 00:39:40,700 把捌零字节来到我身边。 898 00:39:40,700 --> 00:39:42,136 >> 因此,这是有点武断。 899 00:39:42,136 --> 00:39:44,260 我们本可以用任何图案 位的,但在世界 900 00:39:44,260 --> 00:39:46,610 决定好几年 以前,该代表 901 00:39:46,610 --> 00:39:49,710 字符串在内存中的端部, 只是把一大堆零。 902 00:39:49,710 --> 00:39:51,000 因为我们可以检测到。 903 00:39:51,000 --> 00:39:54,790 现在,意味着无信 字母可以表示零。 904 00:39:54,790 --> 00:39:58,480 >> 不过没关系,我们已经看到了 我们使用的是65在97就到了。 905 00:39:58,480 --> 00:40:00,290 我们没有取得任何进展 接近为零。 906 00:40:00,290 --> 00:40:03,040 907 00:40:03,040 --> 00:40:06,540 因此,贝琳达在计算机的内存 实际上要去这里。 908 00:40:06,540 --> 00:40:09,764 我在黄色绘制它只是 要引起我们的注意。 909 00:40:09,764 --> 00:40:11,680 并请注意,同样,这 完全是任意的。 910 00:40:11,680 --> 00:40:12,680 我画它作为一个网格。 911 00:40:12,680 --> 00:40:14,460 如,内存只是一些实物。 912 00:40:14,460 --> 00:40:17,300 它不一定 行和列,本身。 913 00:40:17,300 --> 00:40:20,490 它只是得到了一大堆的字节 在硬件某种程度上实现。 914 00:40:20,490 --> 00:40:22,817 但是,如果贝琳达后我 键入Gabe的名字, 915 00:40:22,817 --> 00:40:25,650 他将在这里结束在内存中, 如果我输入Daven的名字, 916 00:40:25,650 --> 00:40:27,316 比如,他会在这里结束。 917 00:40:27,316 --> 00:40:29,310 我可以继续 即使写的名字。 918 00:40:29,310 --> 00:40:32,100 >> 不幸的是,如果我尝试 写一个超长的名字, 919 00:40:32,100 --> 00:40:33,730 我可能最终会耗尽内存。 920 00:40:33,730 --> 00:40:37,810 在这种情况下,GetString的是 将返回NULL,因为我们说。 921 00:40:37,810 --> 00:40:41,720 不过,值得庆幸的是,至少在这个视觉 在这里,我们没有得到想象中的那么远。 922 00:40:41,720 --> 00:40:45,860 >> 现在有什么好看的是,这 对待事物的总体思路 923 00:40:45,860 --> 00:40:49,720 在盒子是为 c代表的功能 924 00:40:49,720 --> 00:40:52,690 和很多语言, 已知为阵列。 925 00:40:52,690 --> 00:40:55,490 一个阵列是另一种数据类型。 926 00:40:55,490 --> 00:40:57,380 这是一个数据结构,如果你愿意。 927 00:40:57,380 --> 00:41:01,160 在它的结构感真的, 种,看上去就像一个盒子,至少 928 00:41:01,160 --> 00:41:02,320 在你的脑海里。 929 00:41:02,320 --> 00:41:09,680 数组是一个连续的 相同数据类型的序列, 930 00:41:09,680 --> 00:41:11,330 背靠背背靠背。 931 00:41:11,330 --> 00:41:14,720 >> 所以一个字符串,在其他 也就是说,是字符数组。 932 00:41:14,720 --> 00:41:16,120 字符数组。 933 00:41:16,120 --> 00:41:19,070 但事实证明,你可以有 事情束阵列。 934 00:41:19,070 --> 00:41:21,870 实际上,我们可以把连 在数组编号。 935 00:41:21,870 --> 00:41:23,920 这样的形式,其中 我们将要开始 936 00:41:23,920 --> 00:41:26,590 声明这个数据 已知为阵列结构 937 00:41:26,590 --> 00:41:28,250 也将使用方括号。 938 00:41:28,250 --> 00:41:31,500 但是这些方括号将要 有不同的含义在此上下文。 939 00:41:31,500 --> 00:41:33,450 >> 让我们来看看它,如下所示。 940 00:41:33,450 --> 00:41:36,780 假设我打开 在这里一个新的文件。 941 00:41:36,780 --> 00:41:38,535 我保存这为ages.c. 942 00:41:38,535 --> 00:41:41,280 943 00:41:41,280 --> 00:41:43,470 我会在我的文件夹中保存这个位置。 944 00:41:43,470 --> 00:41:46,130 现在我要继续前进 并开始键入的东西 945 00:41:46,130 --> 00:41:53,940 像包括CS50.h,包括 stdio.h中,诠释主作废。 946 00:41:53,940 --> 00:41:57,370 然后这里里面,我想 先有所谓的年龄为int。 947 00:41:57,370 --> 00:42:01,371 >> 而且我会用它来获得 从他或她的年龄的用户诠释。 948 00:42:01,371 --> 00:42:04,620 但此方案是指使用由 多的人,不管是什么背景。 949 00:42:04,620 --> 00:42:05,490 我有一排人。 950 00:42:05,490 --> 00:42:08,281 所有的人都必须输入自己的 年龄也许一些,我不知道, 951 00:42:08,281 --> 00:42:10,530 竞争或事件 他们已经到达了。 952 00:42:10,530 --> 00:42:13,030 所以旁边的人,我 需要另一个变量。 953 00:42:13,030 --> 00:42:15,790 >> 因为如果我只是做 时代变调用getInt,这是 954 00:42:15,790 --> 00:42:18,500 要揍,或覆盖 前面的人的年龄。 955 00:42:18,500 --> 00:42:19,760 所以这是没有好处的。 956 00:42:19,760 --> 00:42:21,790 所以,我的第一直觉 也许,哦,没事, 957 00:42:21,790 --> 00:42:26,260 如果我想要得到多人的 ages--我们称之为age1, 958 00:42:26,260 --> 00:42:31,280 INT age2得到诠释,诠释age3得到调用getInt。 959 00:42:31,280 --> 00:42:35,340 现在我要使用 这里是一些伪代码。 960 00:42:35,340 --> 00:42:37,679 >> 做一些与这些数字。 961 00:42:37,679 --> 00:42:40,470 我们会离开的另一天是什么 我们正在做的吧,因为我们只 962 00:42:40,470 --> 00:42:44,200 关爱的时刻 关于age1,age2,age3。 963 00:42:44,200 --> 00:42:46,450 不幸的是,有一次我 编译这个程序 964 00:42:46,450 --> 00:42:51,140 并把它在实际的用户面前, 什么是根本设计不良 965 00:42:51,140 --> 00:42:53,890 我似乎决定了呢? 966 00:42:53,890 --> 00:42:54,624 是吗? 967 00:42:54,624 --> 00:42:55,499 听众:[听不清] 968 00:42:55,499 --> 00:42:58,071 969 00:42:58,071 --> 00:42:59,820 戴维·J·马兰:是啊, 我还没有尝试过 970 00:42:59,820 --> 00:43:02,028 要弄清楚有多少年龄 我真正关心? 971 00:43:02,028 --> 00:43:05,380 如果我有少于三个人在这里, 因此,少于三个年龄段, 972 00:43:05,380 --> 00:43:07,260 我仍然盲目期待3。 973 00:43:07,260 --> 00:43:08,720 上帝保佑4达人秀。 974 00:43:08,720 --> 00:43:10,990 我的计划是不会甚至支持他们。 975 00:43:10,990 --> 00:43:13,280 >> 所以这个,说来话长 总之,不是一个好习惯。 976 00:43:13,280 --> 00:43:13,780 对不对? 977 00:43:13,780 --> 00:43:16,530 我基本上是复制和 粘贴代码,只是调整 978 00:43:16,530 --> 00:43:17,430 变量名。 979 00:43:17,430 --> 00:43:22,410 而且,我的上帝,如果你有,不是三 年龄,但10或100,甚至6500 980 00:43:22,410 --> 00:43:23,820 大学生,例如。 981 00:43:23,820 --> 00:43:26,950 这不会是特别 优雅的代码,或可持续。 982 00:43:26,950 --> 00:43:29,200 你将不得不 每一次重写程序 983 00:43:29,200 --> 00:43:30,760 你对人的改变数量。 984 00:43:30,760 --> 00:43:35,090 >> 所以,值得庆幸的是,在我们的实际 ages.c文件今天, 985 00:43:35,090 --> 00:43:36,970 我们有更聪明的解决方案。 986 00:43:36,970 --> 00:43:39,800 首先,我要借用 构建我们已经用过几次, 987 00:43:39,800 --> 00:43:43,744 此做while循环中,为了得到 的人在房间的数目。 988 00:43:43,744 --> 00:43:46,910 我只是去纠缠用户,再 又一次,直到他或她给我 989 00:43:46,910 --> 00:43:49,260 n的值是一个正整数。 990 00:43:49,260 --> 00:43:51,590 >> 我可以使用,最后 时间的获得正面的诠释。 991 00:43:51,590 --> 00:43:53,720 但是,我们没有这方面的 实,让我继续 992 00:43:53,720 --> 00:43:55,660 并重新实现了这个想法。 993 00:43:55,660 --> 00:43:58,410 现在在这儿,这是新的把戏。 994 00:43:58,410 --> 00:44:02,260 在第27行,作为评价 在第26行指出, 995 00:44:02,260 --> 00:44:05,180 声明一个数组中 存储每个人的年龄。 996 00:44:05,180 --> 00:44:09,320 >> 所以,如果你想要得到的,而不是一个整数,不 两个整数,但一大堆的整数。 997 00:44:09,320 --> 00:44:13,800 特别是n个整数,为N可能 有三个,也许是100,也许是1000人。 998 00:44:13,800 --> 00:44:17,570 语法很简单,就是 比方说,你想要什么类型的数据? 999 00:44:17,570 --> 00:44:19,620 你想打电话 该内存块? 1000 00:44:19,620 --> 00:44:23,530 那你要拨打的网格 看起来像这样形象地? 1001 00:44:23,530 --> 00:44:27,700 >> 而在这里括号,你说 你要多大的数组是。 1002 00:44:27,700 --> 00:44:30,450 因此更早的时候,我说的 语法是有点不同的位置, 1003 00:44:30,450 --> 00:44:33,614 我们还是用方括号, 但是当我在声明数组, 1004 00:44:33,614 --> 00:44:35,530 内部的数 方括号方式 1005 00:44:35,530 --> 00:44:37,610 要在阵列是多大做的。 1006 00:44:37,610 --> 00:44:42,490 >> 与此相反,当我们使用S 支架刚才我,S,A弦, 1007 00:44:42,490 --> 00:44:46,820 的确是字符数组,但 当你没有声明一个变量, 1008 00:44:46,820 --> 00:44:49,760 与此关键字在这里, 你只是得到 1009 00:44:49,760 --> 00:44:54,280 具体的指标,具体的 元素的数组。 1010 00:44:54,280 --> 00:44:57,090 一旦我们知道了,剩下的 这很简单。 1011 00:44:57,090 --> 00:45:00,765 如果有新的我第一次去打印出来 什么是人编号i时代。 1012 00:45:00,765 --> 00:45:03,890 在这里我只想说人排名第一, 人排名第二,个人第三。 1013 00:45:03,890 --> 00:45:06,306 >> 而我只是在做算术, 让正常人一样, 1014 00:45:06,306 --> 00:45:09,030 我们从一本算 程序,而不是从零。 1015 00:45:09,030 --> 00:45:13,620 然后我打电话调用getInt,但我存储 在年龄答案级别I。 1016 00:45:13,620 --> 00:45:16,610 这是第i个年龄在数组中。 1017 00:45:16,610 --> 00:45:21,640 因此,而上一次我们在治疗 这些箱子的字符为Zamyla的名字, 1018 00:45:21,640 --> 00:45:22,490 及其他。 1019 00:45:22,490 --> 00:45:26,530 现在,这些方块代表 32位或4个字节 1020 00:45:26,530 --> 00:45:29,510 我们可以在其中存储 一个int,一个int,int类型。 1021 00:45:29,510 --> 00:45:31,890 所有这一切,再一次, 具有相同的数据类型。 1022 00:45:31,890 --> 00:45:33,890 >> 现在我做一些愚蠢的, 像时间的推移,只是 1023 00:45:33,890 --> 00:45:35,510 证明写这个程序。 1024 00:45:35,510 --> 00:45:40,050 然后到这里,我再次重复 在阵列说一年以后, 1025 00:45:40,050 --> 00:45:43,090 人的头号意志 是什么岁。 1026 00:45:43,090 --> 00:45:45,010 并弄清楚, math--我的意思是,这 1027 00:45:45,010 --> 00:45:49,260 不是很复杂算术: 我只是补充自己的年龄。 1028 00:45:49,260 --> 00:45:51,240 只是为了演示,再次,这一点。 1029 00:45:51,240 --> 00:45:57,910 >> 正如我可以索引到一个字符串,S, 这样我就可以索引到年龄的数组, 1030 00:45:57,910 --> 00:45:59,950 像有。 1031 00:45:59,950 --> 00:46:03,340 那么,这是怎么回事要带我们? 1032 00:46:03,340 --> 00:46:07,070 所以我们会看到,最终, 在天几件事情来。 1033 00:46:07,070 --> 00:46:09,510 一,这一切的时候, 编写自己的程序, 1034 00:46:09,510 --> 00:46:11,239 像马里奥,贪婪,信用。 1035 00:46:11,239 --> 00:46:13,780 你已经输入的名称 该程序并按下Enter键。 1036 00:46:13,780 --> 00:46:15,610 然后获取用户的输入。 1037 00:46:15,610 --> 00:46:18,137 >> 用的getString,调用getInt, getLongLong,或类似物。 1038 00:46:18,137 --> 00:46:20,720 但事实证明,C支持 一些所谓的命令行 1039 00:46:20,720 --> 00:46:25,740 争论,这是怎么回事,让我们 实际上得到的是你输入的话, 1040 00:46:25,740 --> 00:46:28,570 在闪烁提示, 之后,你的程序的名称。 1041 00:46:28,570 --> 00:46:31,430 >> 因此,在未来的日子里,你 可以键入类似撒, 1042 00:46:31,430 --> 00:46:34,950 或./caesar 13号,此后。 1043 00:46:34,950 --> 00:46:36,070 我们将看到如何工作的。 1044 00:46:36,070 --> 00:46:37,550 因为的确,在 问题设置两个,我们 1045 00:46:37,550 --> 00:46:39,383 要为您介绍 到了一点东西 1046 00:46:39,383 --> 00:46:42,360 让人想起拉尔夫年代 挑战早前制图。 1047 00:46:42,360 --> 00:46:43,970 艺术争先恐后的信息。 1048 00:46:43,970 --> 00:46:46,660 这其实是很 不禁让人想起拉尔夫一样。 1049 00:46:46,660 --> 00:46:51,380 >> 这是一个加密的例子 算法称为ROT13,R-O-T 13。 1050 00:46:51,380 --> 00:46:54,910 这只是意味着旋转 字母在字母表13个地方。 1051 00:46:54,910 --> 00:46:58,309 如果你这样做,你会看到现在 是什么,也许,一个熟悉的短语。 1052 00:46:58,309 --> 00:47:01,100 但在路上,我们要使用 这一点,最终是更普遍。 1053 00:47:01,100 --> 00:47:04,390 >> P中设置两种,标准版, 您将实现一对夫妇的密码, 1054 00:47:04,390 --> 00:47:06,720 一个叫凯撒,一个叫的V @ genere。 1055 00:47:06,720 --> 00:47:10,090 他们两人都是旋转 密码,在某种程度上你 1056 00:47:10,090 --> 00:47:11,826 把一个字母到另一个字母。 1057 00:47:11,826 --> 00:47:12,950 而凯撒是超级简单。 1058 00:47:12,950 --> 00:47:16,220 你加一个,你加13, 或者一些人数达26。 1059 00:47:16,220 --> 00:47:19,570 的V @ genere不上 每个字母的基础。 1060 00:47:19,570 --> 00:47:22,140 所以的V @ genere,你会看到 在规范中,是更安全的。 1061 00:47:22,140 --> 00:47:24,973 >> 但在这一天到底是什么 你将实现和P设置两个, 1062 00:47:24,973 --> 00:47:29,050 是您同时使用该密钥 用于加密和解密。 1063 00:47:29,050 --> 00:47:32,160 参照转弯的过程中 纯文本,一些原有的消息, 1064 00:47:32,160 --> 00:47:34,490 成暗号文字,这 什么是加密的。 1065 00:47:34,490 --> 00:47:36,220 然后再解密它。 1066 00:47:36,220 --> 00:47:38,119 >> 在黑客的版本, 同时,你会 1067 00:47:38,119 --> 00:47:40,660 负责类似的东西 在精神上,我们会给你 1068 00:47:40,660 --> 00:47:44,610 一个文件,从一个典型的Linux,或 Mac或Unix的计算机名为Etsy的 1069 00:47:44,610 --> 00:47:47,800 密码,其中包含一个全 一串用户名和密码。 1070 00:47:47,800 --> 00:47:50,932 而这些密码都 被加密或散列, 1071 00:47:50,932 --> 00:47:53,140 可以这么说,更恰当 您将在规范中看到的。 1072 00:47:53,140 --> 00:47:57,090 >> 而黑客版将挑战 你服用的输入这样的, 1073 00:47:57,090 --> 00:47:58,800 和破解密码。 1074 00:47:58,800 --> 00:48:02,590 也就是说,搞清楚什么 人的密码居然是。 1075 00:48:02,590 --> 00:48:05,570 因为,事实上,密码是 通常不存储在清晰, 1076 00:48:05,570 --> 00:48:08,260 和一般口令 应该不难猜到。 1077 00:48:08,260 --> 00:48:09,610 这不是常有的事。 1078 00:48:09,610 --> 00:48:12,110 >> 而我认为我们会做的是 总结了几分钟 1079 00:48:12,110 --> 00:48:15,160 一眼特别 口令选择不当 1080 00:48:15,160 --> 00:48:17,260 从电影,你可能还记得深情。 1081 00:48:17,260 --> 00:48:18,915 如果没有,你应该租房。 1082 00:48:18,915 --> 00:48:20,070 >> [视频回放] 1083 00:48:20,070 --> 00:48:22,320 >> -Helmet,你恶魔,这是怎么回事? 1084 00:48:22,320 --> 00:48:24,240 你在做什么,以我的女儿? 1085 00:48:24,240 --> 00:48:28,010 >> -Permit我介绍 才华横溢的年轻的整形外科医生, 1086 00:48:28,010 --> 00:48:30,010 医生菲利普Schlotkin。 1087 00:48:30,010 --> 00:48:35,020 最大的隆鼻的人在 整个宇宙和比佛利山庄。 1088 00:48:35,020 --> 00:48:36,140 >> - 您的殿下。 1089 00:48:36,140 --> 00:48:36,820 >> - 鼻腔的工作吗? 1090 00:48:36,820 --> 00:48:37,700 我不明白。 1091 00:48:37,700 --> 00:48:39,070 她已经有了一个隆鼻。 1092 00:48:39,070 --> 00:48:40,800 这是她甜美的16本。 1093 00:48:40,800 --> 00:48:42,590 >> 不,这不是你的想法。 1094 00:48:42,590 --> 00:48:44,490 这是非常非常糟糕。 1095 00:48:44,490 --> 00:48:48,160 如果你不给我 组合的气屏, 1096 00:48:48,160 --> 00:48:52,748 医生Schlotkin会给你 女儿回她的老鼻子。 1097 00:48:52,748 --> 00:48:53,748 - [喘气] Nooooooooooooo。 1098 00:48:53,748 --> 00:48:57,684 1099 00:48:57,684 --> 00:48:59,652 你从哪里得到的? 1100 00:48:59,652 --> 00:49:00,640 >> - 所有权利。 1101 00:49:00,640 --> 00:49:02,506 我要告诉,我会告诉。 1102 00:49:02,506 --> 00:49:03,498 >> 不,爸爸,没有。 1103 00:49:03,498 --> 00:49:04,490 您不得。 1104 00:49:04,490 --> 00:49:06,090 >> -You're权亲爱的。 1105 00:49:06,090 --> 00:49:07,390 我会想念你的新鼻子。 1106 00:49:07,390 --> 00:49:10,990 但我不会告诉他们的 组合不管。 1107 00:49:10,990 --> 00:49:12,450 >> - 非常好。 1108 00:49:12,450 --> 00:49:14,830 医生Schlotkin,做你最糟糕的。 1109 00:49:14,830 --> 00:49:15,744 >> - 我的快乐。 1110 00:49:15,744 --> 00:49:19,860 1111 00:49:19,860 --> 00:49:20,800 >> - 不! 1112 00:49:20,800 --> 00:49:22,780 等待,等待。 1113 00:49:22,780 --> 00:49:24,000 我会告诉。 1114 00:49:24,000 --> 00:49:25,830 我会告诉。 1115 00:49:25,830 --> 00:49:28,270 >> - 我知道它是可行的。 1116 00:49:28,270 --> 00:49:31,390 好吧,把它给我。 1117 00:49:31,390 --> 00:49:36,220 >> -The组合之一。 1118 00:49:36,220 --> 00:49:36,740 >> - 酮。 1119 00:49:36,740 --> 00:49:37,473 >> - 酮。 1120 00:49:37,473 --> 00:49:37,972 - 两个。 1121 00:49:37,972 --> 00:49:38,471 - 两个。 1122 00:49:38,471 --> 00:49:39,800 - 两个。 1123 00:49:39,800 --> 00:49:40,300 - 三。 1124 00:49:40,300 --> 00:49:40,800 - 三。 1125 00:49:40,800 --> 00:49:41,800 - 三。 1126 00:49:41,800 --> 00:49:42,300 - 四个。 1127 00:49:42,300 --> 00:49:42,800 - 四个。 1128 00:49:42,800 --> 00:49:44,707 - 四个。 1129 00:49:44,707 --> 00:49:45,521 - 五。 1130 00:49:45,521 --> 00:49:46,430 - 五。 1131 00:49:46,430 --> 00:49:47,930 - 五。 1132 00:49:47,930 --> 00:49:53,480 -so的组合之一, 二,三,四,五。 1133 00:49:53,480 --> 00:49:56,140 这是最愚蠢的组合 我曾经听到了我的生活。 1134 00:49:56,140 --> 00:49:58,640 这就是那种东西的的 白痴不会对他的行李。 1135 00:49:58,640 --> 00:50:00,000 >> - 谢谢你,你的高度。 1136 00:50:00,000 --> 00:50:01,340 >> [遥控点击次数] 1137 00:50:01,340 --> 00:50:02,450 >> - 什么你做什么? 1138 00:50:02,450 --> 00:50:03,800 >> -I关掉了壁。 1139 00:50:03,800 --> 00:50:05,010 >> 不,你没有,你 关掉了整部影片。 1140 00:50:05,010 --> 00:50:06,220 >> - 我意有所指按错键。 1141 00:50:06,220 --> 00:50:07,064 >> - 嗯,把它放回去吧! 1142 00:50:07,064 --> 00:50:07,910 放电影回来! 1143 00:50:07,910 --> 00:50:08,300 >> - 是的,先生! 1144 00:50:08,300 --> 00:50:08,799 是的,先生。 1145 00:50:08,799 --> 00:50:09,660 - 让我们走,阿诺德。 1146 00:50:09,660 --> 00:50:10,450 来吧,格雷琴。 1147 00:50:10,450 --> 00:50:12,533 当然,你知道我会 必须向您这一点。 1148 00:50:12,533 --> 00:50:16,720 1149 00:50:16,720 --> 00:50:17,220 - 嗯? 1150 00:50:17,220 --> 00:50:17,802 没有工作? 1151 00:50:17,802 --> 00:50:18,510 哪来的王? 1152 00:50:18,510 --> 00:50:20,218 >> - 它的工作,先生,我们 有组合。 1153 00:50:20,218 --> 00:50:20,740 -Great。 1154 00:50:20,740 --> 00:50:24,810 现在,我们可以把每一个最后一口气 从地球Druidia新鲜空气。 1155 00:50:24,810 --> 00:50:25,890 有什么组合? 1156 00:50:25,890 --> 00:50:28,155 >> - 酮,二,三,四,五。 1157 00:50:28,155 --> 00:50:29,890 >> 酮,二,三,四,五? 1158 00:50:29,890 --> 00:50:30,390 - 是的。 1159 00:50:30,390 --> 00:50:31,110 - 这就是惊人的。 1160 00:50:31,110 --> 00:50:34,550 我有同样的 结合我的行李。 1161 00:50:34,550 --> 00:50:37,160 准备空间球1 立即离境。 1162 00:50:37,160 --> 00:50:38,160 >> - 是的,先生。 1163 00:50:38,160 --> 00:50:40,745 >> - 和改 结合我的行李。 1164 00:50:40,745 --> 00:50:41,578 [关门声音] 1165 00:50:41,578 --> 00:50:42,064 [CLINK门击中头盔] 1166 00:50:42,064 --> 00:50:42,550 -Ahh。 1167 00:50:42,550 --> 00:50:43,383 [完视频回放] 1168 00:50:43,383 --> 00:50:46,700 戴维·J·马兰:这就是它的 CS50,我们会看到你下周。 1169 00:50:46,700 --> 00:50:49,883 旁白:现在,深 思考,通过Daven法纳姆。 1170 00:50:49,883 --> 00:50:53,160 1171 00:50:53,160 --> 00:50:55,860 >> DAVEN FARNHAM:编码中的C是 比刮了这么多困难。 1172 00:50:55,860 --> 00:50:57,320 printf的,划痕是一个谎言。 1173 00:50:57,320 --> 00:50:59,930 1174 00:50:59,930 --> 00:51:01,430 >> [笑SOUNDBITE] 1175 00:51:01,430 --> 00:51:02,486