ANDI Peng: Suntem aproape prin toate psets. De fapt, suntem prin majoritatea dintre cele mai dificile psets. Deci suntem de fapt, doar O să fel de briză prin următoarele două săptămâni. Vom începem să discutăm despre nostru proiecte finale, evenimentele vine în următoarele câteva săptămâni. Și viața va fi floare la ureche. Deci, nu prea mult azi. Să sperăm că, de fapt, va briza prin ordinea de zi de astăzi, și apoi să fie de aici cu ceva timp de pierdut. De asemenea, vreau să-mi cer scuze pentru lipsa de bomboane astăzi. Nu știu de ce. Dar în săptămâna premergatoare Halloween, aș uita bomboane. Deci, eu sunt de fapt doar un vast dezamăgire pentru tine acum. Pentru că îmi amintesc literalmente bomboane pentru fiecare clasă unică, dar Halloween. Dar saptamana viitoare, voi aduce dubla cantitatea de bomboane pentru a compensa faptul că, toate pentru tine. Va fi minunat. Deci, am o pereche de anunțuri în ceea ce privește unele programarea. Am unele probleme de programare. Apoi vom trece la vorbesc despre ceea ce se numește chmod. Vom vorbi despre rapid TCP / IP HTTP. Și apoi vom Codul nostru site-ul propriu, folosind HTML si CSS. Și apoi voi pleca de fapt, poate ca de 20 de minute pentru a vorbi despre pset6. Deoarece pset6 este de fapt o mulțime de lucruri pe care le-am văzut deja mai înainte, dar am vrut pentru a reîmprospăta unele dintre aceste concepte precum și învăța câteva funcții noi. Misto. Deci primul rând, bun venit înapoi de la pauză. Sper că ești pauză a fost plăcută. Vrei ai făcut pentru pauza? Audiența: Am fost la New York. ANDI Peng: Ai fost la New York? Cred că jumătate școala noastră a plecat la New York. E în regulă. Mi-am petrecut cea mai mare parte pauză sedentar în pat Netflixing. Și a fost un moment bun. Dar acum suntem din nou, din nou în sesiune, înapoi în leagăn de lucruri. Avem o PSET datorită vineri la prânz. Cred că ai deja luat testul tău, da? Deci oricine altcineva care are nu au avut teste lor vă rugăm să vină și de a lua teste dvs. la mine la sfârșitul secțiunii. Sau urmări mă jos de pe campus. Voi avea cu mine undeva. Proiectul nostru final Propunere pre-asemenea. Deci, pentru cei dintre noi care nu au luat această clasă înainte, cheia de boltă a CS50 este foarte mult culminat în acest Grand proiect pe care elevii să propună. Și pre-propunerea, doar o idee generală de ce s-ar putea dori să facă pentru lor proiect, această idee se datorează luni, Luni la prânz. Deci destul de mult, David cred ca va vorbi mai mult despre acest lucru în curs dacă nu are deja. Și există o pagină solid pe site-ul nostru explicarea toate cerințele proiectului. Dar, în esență, alege orice subiect care le-ați fost interesat în a lungul timpului aici la CS, fie că este vorba de jocuri de noroc sau proiectare sau video sau ceva. Și vă puteți într-adevăr un fel de acum se aplică unele dintre lecțiile că am învățat aici, în CS50-- hi, welcome-- la destul de mult efectuarea un proiect final de alegerea ta. Tot ce e luni din cauza este doar un blurb scurt prin e-mail pentru mine, o propoziție rapid, cum ar fi, hei, Andi, Sunt foarte interesat de proiectarea un joc care face acest lucru pentru iOS. Misto. Lasă-mă să inițială dumneavoastră scurt idei pentru proiectele finale. Și vom vorbi prin sau nu care este de fapt o idee bună sau nu, dacă este o idee fezabilă sau nu. Dar doar pre-propunerea se datorează lunea viitoare. pset6, minunat web-- nostru, care este greșit. Pset7? pset6? E pset6, nu? pset6, serverul nostru web, se datorează Vineri la prânz cu întârziere zi. Orelor relua în mod normal, de luni până joi 8:00 - 11:00 în această săptămână. Cred că Commons pentru următoarele trei nopți. Misto. Înainte de a avea în materiale, nimeni nu nici întrebări, bancuri, povesti? Ce ai face pentru pauza toamna? Audiența: Ce să fac? ANDI Peng: Deja e vârstele în urmă, de fapt. Christabel a plecat la New York. Am stat aici și Netflixed. Audiența: Da am fost aici. ANDI Peng: Oh, OK. Audiența: Nu-mi amintesc ce anume. ANDI Peng: Asta e OK. Audiența: Netflixing probabil. ANDI Peng: Netflixing. Da, e un moment bun. BINE. In regula. Orice întrebări înainte sărim în materiale? De asemenea, vom încerca să viteza prin secțiunea astăzi, nu prea mult pentru a acoperi. Și sperăm, vom ajunge aici un pic mai devreme. Ne pare rău pentru că nu bomboane, de asemenea. Sunt o dezamăgire, în special în timpul Halloween. In regula. Misto. Deci vom începem să discutăm despre un argument linie de comandă numit chmod. chmod, tot ce este este doar un sistem de Unix apel efectuat de la linia de comandă pentru a schimba permisiunile de fișiere. Deci, de exemplu, ne-am toate întâlnit o pagină ca acest lucru, probabil, undeva în durata de viata de a fi nostru un internet utilizator, în cazul în care server-ul nostru are ne-a dat eroarea Interzis. Nu aveți permisiunea de a accesa, bla, bla, bla, pe acest server. Tot ceea ce înseamnă cu adevărat este că permisiunile care au fost atașate la orice pagina pe care încercați să acces nu au fost deschise pentru tine. Deci destul de mult, chmod este modul în care putem modifica aceste permisiuni de sistem pentru a oferi tuturor, utilizatorul, grupul, sau lumea, sau la oricare combinație a acestora acces la anumite fișiere, directoare, într-adevăr ceva, orice fel de sistem de pe un sistem de operare. Deci, dacă oricare dintre baieti au computere dacă vă simțiți ca urmare a cu mine astăzi, complet nu ezitați să scrieți doar lucruri în. Dacă nu, puteți închide pur și simplu afară. Deci, am de gând să trageți de fapt up terminalul mea acum. Deci comanda pentru a rula chmod, sau cel puțin la fel pentru a lista permisiunile dvs. director de fișiere, este doar ls-l. După cum puteți vedea, o grămadă de chestii apare de cele mai multe Este important să ne pe partea stângă aici. Voi vedea o grămadă de rs, ws, 1 /. Da. Acestea sunt, în esență, doar toate permisiunile de fișiere pentru a explica ce anumite directoare și fișierele din sistemul dvs. are. Deci, să ne întoarcem la punctul de putere aici. Deci, în plus față de numele de fișiere ca voi se poate vedea pe dreapta, suntem în căutarea de a vedea, în esență, doar coloana din stânga. Deci, în plus față de doar numele fișierelor, am Puteti vedea permisiunile de fișiere, lor grup proprietar, numele grupului, data că dosarul a fost ultima modificată, etc.. Puteți vedea o mulțime de lucruri folosind chmod. Deci felul în care citim chmod este că prima literă am ignora destul de mult în ceea ce privește permisiuni de citire. Prima scrisoare doar ne spune ce tip de sistem ne accesarea. d, în acest caz, este o folder sau director. Deci, noi știm că, în prezent spațiul de lucru meu secțiune șapte a fost un director. Și apoi veți vedea trei triade, în esență doar trei seturi de trei caractere. Și vă puteți gândi la fiecare ca un pic. Deci, trebuie doar trei seturi de trei biți, noua biți în total. Tu le trateze în grupuri de câte trei. Deci primul grup de trei este întotdeauna permisiunile dvs. de utilizator. Al doilea grup de trei este dvs. întotdeauna permisiunile de grup. Și al treilea set de trei este întotdeauna ca lumea, de peste tot. permisiunile Deci cred ușor Întrebarea care se pune este ce este diferența dintre utilizator și de grup. Diferența principală între utilizator și de grup este faptul că un utilizator este doar dvs. personal accesarea orice ar fi acum. Un grup poate fi, dacă aveți mai multe utilizatorii de pe un computer, de exemplu. Toate acestea pot fi tratate ca un grup. Și atunci lumea este doar lumea, toată lumea. Astfel încât să putem vedea mai târziu cum putem modifica pe cei în diferite permisiuni. Deci destul de mult, suntem gând să se concentreze în continuare pe de o parte din stânga, în cazul în care pentru directorul CS50 vedem drwx, în cazul în care R reprezintă doar că este ușor de citit. W înseamnă doar că este inscriptibil. Și apoi doar x înseamnă că este executabil. Ai crede că-l fel de nu are sens. Ar trebui să fie e. Dar x fapt un fel de functioneaza un pic mai bine, pentru că puteți aminti mai bine. Deci cele trei tipuri de lucruri pe care le poate face, puteți citi fie un fișier, puteți avea permisiunea de a scrie o fișier, sau ai putea avea permisiunea pentru a executa un fișier. Și astfel modul în care suntem de fapt reprezintă cele în biți este numărul 4, 2 și 1. Deci tot ce e de citit este reprezentată de numărul de 4. Orice lucru care este inscriptibil este reprezentat de 2. Și nimic din ce e executabil așa cum este reprezentat prin 1. Deci, în acest sens, putem, de asemenea, reprezintă aceste Numere hi, bine ai venit, într-un mod diferit. Scuze. Înaintea tuturor, am de gând să mi cer scuze în numele tuturor care intră în clasa acum. Am uitat bomboane astăzi. Îmi pare rău că sunt un eșec în această săptămână de Halloween. Voi aduce dubla cantitatea de bomboane data viitoare pentru a face pentru el. Dar oricum, îmi pare rău despre faptul că băieți, îmi pare rău. Deci felul în care putem de fapt de intrare pe comanda noastră argumentul este că poate face chmod permisiuni slash de grup, în cazul în care grupul este doar ceea ce grup încercăm să schimbe. Și permisiunile sunt ce vrem să adăugați la acesta. Astfel de exemplu, plus adaugă permisiuni, și Scădere ia departe permisiuni. Și tipurile de grupul nostru, avem o pentru toți, u pentru utilizatori, g pentru grupuri, sau o pentru alții. E un pic abstract acum. Dar vom trece peste câteva exemple de doar pentru a demonstra acest lucru rapid reală. Toată lumea bine pe acest diapozitiv, așa că am putea merge mai departe? Misto. Deci, de exemplu, rwx. Înainte de a vorbi despre ceea ce reprezintă, în primul rând ce înseamnă rwx? Dacă vedeți că acest anumită fișier are permisiuni de rwx, Ce înseamnă asta persoană ar putea fi capabil să facă? Audiența: Read, scrie și să execute. ANDI Peng: Da, exact. Puteți citi scrie și executa. Din cauza toate cele trei din cei caractere sunt prezente. Deci, dacă mergem mai departe și să vorbim despre acest lucru în ceea ce privește biți, rwx poate fi, de asemenea, reprezentat ca 700. Pentru că după cum puteți vedea în orice un fel de fișier director permisiune, există trei triade. În acest caz, doar primele triadă are nimic acolo. Deci, în acest caz, r este de 4, W este 2, iar x este 1. Dacă adăugați cei împreună, e 7. Și așa că, dacă conversia să binar, e 700. Deoarece 7 este prima triada. 0, nu e nimic de față în al doilea triada. Și apoi nu e nimic în prezent a treia triada, așa că e un alt 0. Deci, în același sens, o grămadă de triade poate fi reprezentat doar în biți, doar în binar, de asemenea. Deci 700 înseamnă exact același lucru ca și rwx ------ în termeni de permisiuni. Toată lumea clar pe care? Misto. Și așa chmod 111 ar da care permisiuni la dosar? Da voi un cuplu secunde pentru a converti acest. Amintiți-vă, primul triadă este pentru utilizator. Cea de a doua triada este pentru grup. Și a treia triada este pentru toată lumea. Și așa chmod 111 ar da care tip de permisiuni și cui? Dura câteva secunde pentru a gândiți-vă și să vină înapoi. Da. Audiența: Deci, toată lumea poate executa. ANDI Peng: Da, exact. Audiența: Dar nimeni nu poate citi sau scrie. ANDI Peng: și nu ezitați pentru a explica tuturor cum ai ajuns la această concluzie. Audiența: Ei bine, pentru utilizator, de grup, și în lume, totul este 1, care este codul pentru executabil. ANDI Peng: Da, exact. Deci 1, în acest caz, tot ce știm este că este codul executabil. Deoarece lectură este de 4. Scrisul este 2. Și executabilul este de 1. Deci, este toate cele trei triade sunt 1, care înseamnă că în lume, pentru utilizator, și grupului, ele sunt toate executabil. Toată lumea bună cu asta? BINE. Și astfel a doua cale că putem de fapt scrie aceasta, de asemenea, este de tine ar putea face doar chmod un x plus. un înseamnă toate sau toată lumea. Plus înseamnă a da permisiuni. Și apoi x înseamnă executabil. Deci sunt două comenzi sunt de fapt identice. Deci, dacă doriți să rulați acest lucru în terminalul, faci chmod 111, numele de directorul sau fișierul. Sau puteți face chmod un plus x, Numele fișierului director. Același lucru, doar un mod mai ușor, probabil, pentru unii de a reprezenta sau schimbare permisiunile de fișiere. Fiecare OK cu chmod înainte de a ne muta pe? Misto. Deci, acum vom merge într-un câteva slide-uri ale unor concepte abstracte foarte că eu sunt destul de mult O să briza prin. Și este absolut OK dacă Nu înțeleg totul. Chiar și acum, eu încă nu prea înțelege totul complet. Dar e mai mult de a obține înțelegerea de nivel superior de modul în care unele dintre aceste lucruri de lucru. Deci vom vorbi rapid despre TCP / IP, care este doar de control al transmisiei Protocol slash Internet Protocol. Amintiți de curs, David, te-a învăța exemplul unde el ar trece notele într-un plic până la ca partea de sus a sala de curs? Deci, în sala facultatea de drept David a demonstrat, în esență, cum TCP / IP funcționează în sensul că tot ce este este un mijloc de a se asigura că datele a fost livrat peste un server sau pe internet. Deci în exemplul plicului și mesajul, utilizatorul la sfârșitul ar putea vedea că, oh, am nevoie pentru a primi patru pachete de informații. Dar, de fapt am primit doar trei. Asta înseamnă că trebuie să fie lipsește unul. Și nu a fost livrat. Și astfel TCP / IP de pe internet, prin intermediul computerului și server, face exact același lucru. Tot ce face este specifica o cadru în care o transmisie de date pierdute pachetele pot fi retrimis și primit. Ca pe internet atunci când sunteți încercarea pentru a accesa fișiere online sau trimite fișiere unui prieten sau uita-te la web browsere, mii și mii de miliarde și miliarde de bytes informații sunt transferate pe milisecundă. Și e foarte, foarte confuz. Și e foarte greu să știu de fapt ce a fost trimis și ceea ce nu a fost trimis. Și astfel TCP / IP specifică doar un cadru coerent în care dvs. de web browser-ul și server-ul dvs. poate un fel de a comunica unul cu celălalt, doar asigurați-vă că pachetele sunt toate aici și nimic nu e pierdut și toate datele pe care le-ai solicitat este, de fapt afișarea în mod corespunzător. Toată lumea OK pe care foarte doar la nivel înalt scurt înțeles? Misto. Deci vom muta în a vorbi despre HTTP, care este doar Protocolul de transfer hipertext. HTTP, tot ce este este ceea ce orice pagină sau fișier este accesat pe site-ul dvs., serverul returnează un HTTP cod de stare răspuns la cererea asigurându-vă că fie, oh, această cerere a trecut prin. Și totul a afișate în mod corespunzător. Sau, oh, nu, 404. Ceva n-a mers bine. Oh, nu pot afișa. Tot ce este este că, indiferent de încerci să acces, utilizați ca utilizatorul încearcă să acceseze, pe internet-- doar asigurându-vă că fie au succes accesat orice ar fi fost sau nu accesat cu succes orice ar fi fost. Și astfel de stare HTTP Codul doar vă oferă un mijloc de a fi în măsură să știe dacă sau nu a fost de succes sau nu. Deci, de exemplu, o cerere de exemplu. Puteți vedea aici e de obicei în mod obișnuit patru linii. Avem un HTTP GET 1.1, care este doar URL-ul cerere metodă, protocolul versiune, numele câmpului, și valoarea câmpului. Deci nu este nevoie să complet memora nimic aici. Doar un fel de facut cunostinta vă cu modul în care acestea arata. In acest exemplu, cererea metoda URL-ul este doar ceea ce cerere pe care îl trimiteți pe server. Ca, hei, server, chiar vreau să acces bla, bla, bla, pagina HTTP. Versiunea de protocol este doar ceea ce versiunea gazdă sau server-ul dvs. este folosit pentru a avea acces la informații. Numele câmpului este site-ul sau URL pe care încercați să îl accesați, În acest caz, www.apple.com. Iar valoarea câmp este doar în mod tipic nume, valoare. Și poate fi un fel de combinații orice de litere sau cifre sau orice altceva. Deci o cerere tipic, așa ce computerul de fapt trimite la serverul care spune, hei, Știi ce am nevoie de acest afișat, asta e un fel de cerere că ei de fapt primesc. Un răspuns exemplu de ceea ce serverul va trimite înapoi la tine ar fi destul de mult același lucru, cu excepția un cod de stare în partea de sus. Deci 200, 2 0 0 este întotdeauna codul de stare pentru OK. Cum ar fi, OK, această cerere a trecut prin. Ai fost accesa totul corect. Viata e buna. Viața este în regulă. Totul este complet bun. Și astfel acest spune doar browser-ul dvs. și server-ul dvs., hei, bine totul e. Am toate informațiile de care am nevoie. Misto. Dar problema este uneori probleme veni când have-- ultima cred Am vorbit despre duplicate. Aveți răspunsuri mai puțin bune. Deci, de exemplu, 404 este Page Nu a fost găsit. Uneori trebuie un acces Interzis. Aveți diverse alte coduri de stare care eu sunt sigur că ați văzut tot atunci când sunteți încercarea de a face cercetare pe internet. Și browser-ul vă oferă , nu, nu pot accesa. Și tu ești ca, de bine, rahat. Așa că destul de mult, nu e unele coduri de stare destul de comune. Poate vă familiarizați cu cele care sunt cele. Cel mai amuzant cel care Cred că am auzit vreodată de-- dacă se întâmplă să privi în sus toți on-line, pentru un motiv oarecare nu e de fapt, un cod de stare reală numit 418 Sunt un ceainic. Am googled în cazul în care origine aceasta a fost de la. Și se pare că unul April Fools ' Zi un cuplu decenii în urmă, cineva gândit că ar fi hilar pentru a crea un nou cod de stare numită 418 Sunt un ceainic. În mod legitim, numele acestei Codul se numește eu sunt un ceainic. Am uitat ce pagina trebuie sa du-te pentru a face de fapt, acest ecran. Dar se pare că, de fapt, puteți obține un cod de stare de Sunt un ceainic oarecum prin a face ceva. Deci, există sute și sute de coduri de stare. Unii dintre ei face mai mult sens decât altele. Dar destul de mult doar facut cunostinta te cu cele mai comune. Organismul entitate solicitată este scurt și robust, se pare. Astfel încât, uneori, există mai multe erori înfricoșătoare decât că sunt un ceainic. Dar aceasta este una care cred ai un fel de speranță pentru a lovi. Dar nu cred că o vei face. Toată lumea bună cu privire la statutul doar coduri, cereri, procese, procesul de luare a sigur de informații sunt livrate în mod corespunzător? Deci, acum vom tranziție într-o parte de distracție de la punctul astăzi, în cazul în care vorbim un pic despre HTML. HTML, tot ce este HyperText Limbaj de marcare. E doar limba standard de utilizați pentru a crea toate web pagini pe internet. Deci, orice pagină web, ceea ce este pagina web preferat? Care este pagina web preferat? Audiența: [neauzit]. ANDI Peng: Îmi pare rău? Audiența: Tumblr. ANDI Peng: Tumblr. Deci, Tumblr este scris în HTML. Și așa vom merge de fapt, prin și juca în jurul cu unele dintre aceste lucruri mai târziu. Destul de mult ai totul trebuie să învețe, să cunoască, pentru a scrie HTML puteți probabil doar Google pe internet. HTML, nu e un program ca C în cazul în care puteți crea și de a face variabile lucruri interesante cu ea. E mai mult de doar, oh, acest lucru este cum am doresc ca lucrurile să apară pe site-ul meu. Și Mă duc să-l puneți în. Și o să-l stil. Deci HTML, într-un sens, e la fel ca o formatare sau șablon limbă. Este mult mai ușor. Este mult mai ușor de a învăța, mult mai ușor să scrie în decât programarea tipic limbă, foarte ușor, foarte ușor accesibil și prietenos. Așa că, de fapt de gând să joace în jurul valorii de, scrie propriile pagini de astăzi. Dar înainte de a începe, vreau doar să du-te asupra unor bune practici scurte. Deoarece HTML este un astfel de ușor limbă și pentru că chiar dacă faci câteva lucruri greșite, uneori nu se poate observa, vrem să ne asigurăm că suntem de fapt, aderarea la cele mai bune practici noastre să vă asigurați că lucrurile pe care ar putea fi întâmplă în jurul, dar nu sunt întotdeauna de gând să nu meargă drept asigurați-vă că acestea sunt minimizate. Deci destul de mult, asigurați-vă că toate dvs. de închidere etichetele atunci când scrieți în HTML. Dacă sunteți de deschidere a unei corp, asigurați-vă că sunteți închide cu un corp undeva. Doriți să vă asigurați că dvs. Pagina web validează cu ajutorul ceea ce se numește W3 Validator. Puteți doar Google, care on-line, și nu există o legătură la ea. Și apoi doriți să HTML separat, care este limba de marcare de la stilul tau, care este limba CSS David a demonstrat că suntem, de asemenea, de gând să joace un pic cu prelegere. Misto. Deci, oricând doriți să rulați HTML aparatul CS50, vom rula un program numit apache, care tot ce este doar un construit în server de web care toată lumea din CS50 are acces la. Noi o numim apache50 doar pentru că ne-am place să numesc tot 50 în CS50. Deci modul în care începe pe web CS50 server este prin tastarea pe comanda ta line apache50 începe punct. Și dacă vrei să-l termine în orice timp, se termina apache50 nr punct. Și te-a lovit Enter. Și ar trebui să fie poziția aici în curând. Da. Deci, eu sunt doar de gând să merg repede peste un exemplu de pagină web într-adevăr scurt. Și vom să-și petreacă ca 10, 15 minute de joc în jurul valorii de scris propriile noastre pagini web. BINE. Deci, aici, în IDE-- poate toată lumea vedea că? Nu chiar. Aici, voi mări. Tocmai am acest șablon scurt aici cu nimic de fapt, în el. Noi doar de gând să scrie rapid un program de HTML în care ne-am salut la lumea. Deci, aceeași lucru ca și în C, acum suntem doar de gând să o fac în HTML. Nimeni nu vrea să de fapt doar încercați să-mi dea primul lucru pe care ar trebui să pună într-un document HTML? Da. Audiența: Parantezele, sau [] neauzit. ANDI Peng: Da. Deci ceva care este foarte unic la HTML pe care le de obicei în mod tradițional nu se confruntă în alte comandă limbaje de programare de nivel linie este că noi de fapt la specificați tipul de fișier că acest lucru se întâmplă pentru a fi în partea de sus a codului nostru. Deci, în acest instance-- cred asta e comanda corect, nu? Da. În partea de sus, vrei doar să includă bang DOCTYPE html în paranteze doar pentru a spune computer, hei, uite. Și document HTML se apropie. Și atunci cum vrem pentru a începe fișierul nostru? Dacă vrem doar să spun salut, au un pagină web care spune salut la lume, cum vom merge despre construirea asta? De fapt, să ne întoarcem la Google. Și putem face de fapt acest lucru. Da. Nu mergem. Deci HTML. După cum puteți vedea, browser-ul meu este de fapt styling automat asta pentru mine. Acelasi lucru ca și în C, atunci când a crea un bretele buclat deschis, browser-ul în mod automat adaugă în acoladă aproape. Din fericire, IDE nostru îi place să face acest lucru pentru noi. Deci, acum putem fel de tip începutul unei etichete, și o să ne spună întotdeauna să amintiți-vă pentru a introduce la sfârșitul tag-ul. Cred că acest lucru trebuie să fie capitalizate. Și apoi ne-o dorim pentru a adăuga, întotdeauna, un cap în care este titlul. Vrem doar pentru a apela poate acest salut, iar apoi corpul. Și acolo te duci. Care este de fapt documentul nostru HTML. Deci felul în care orice document HTML este întotdeauna în stil in-- același lucru cu void main Int. Mereu doriți să aveți HTML o etichetă deschide și închide în partea de sus și de jos a codului. Vrei sa ai un cap în interiorul care conține titlul, doar indiferent va afișa fila de dvs. de web pagină, și apoi un corp în interiorul, care va afișa, de fapt conținutul de ce vrei sa faci. Deci, dacă ai vrut pentru a rula de fapt, asta, am de gând pentru a micșora înapoi. Puteți începe efectiv apache50 începe punct. Misto. Și astfel, după cum puteți vedea, acum această legătură a apărut. Se spune site-ul dvs. este acum disponibil la un link de mai jos. Deci, toate IDE noastră are done-- nu IDE, sorry-- da, IDE noastră a făcut este crearea unui web link pe care toate paginile noastre web pot fi accesate de pe server. Deci, haideți să aruncăm o privire aici. Să faceți clic pe acest lucru, du-te la hello.html. Și veți vedea o foarte simplu Pagina web pentru lumea salut. BINE. Vom merge la doar fapt au everyone-- Da, ce mai faci? Audiența: Am o întrebare de bază. ANDI Peng: Da. Audiența: Cum salvați fișierul ca un HTML? ANDI Peng: Da. Deci, dacă ar fi să crea un nou fișier, dacă fac New File, Untittle, dacă o fac, section.html, boom-ul, asta e tot ce trebuie să fac. Audiența: [inaudibil]? ANDI Peng: Nu. Audiența: [neauzit]. ANDI Peng: Nu. Audiența: [neauzit]. ANDI Peng: Da. Destul de mult, extinderea pe fișierul pe care se află în interiorul IDE dvs., care spune computerul, care spune browser-ului, hei, uite. Acest lucru va fi cod scris în această limbă. Astfel, de exemplu, în Microsoft Cuvânt, ce fac toate documentele Word final, ceea ce extensie? .doc sau .docx, nu? Tot ceea ce face este specifică la sistemului de operare, hei, ai un document Word vine. Deschideți-l cu Word. Acelasi lucru cu PDF-uri. Stie, oh, am nevoie de pentru a deschide acest fișier cu Adobe Reader sau Adobe Acrobat. Și astfel extensii opera același mod ca și în calculatorul dumneavoastră. Dacă specificați pagina de cod să fie numit HTML, atunci știe, oh, ai codul HTML. Am de gând să-l trateze ca cod html. Deci, este foarte inteligent în acest sens. Deci, toată lumea, să luăm ca 10 minute și doar a crea propriile noastre site-uri web. Să adăugăm în lucrurile minunate. Simțiți-vă liber să spun ce vrei. Vreau doar să vă asigurați că Serverele tuturor rulează corect înainte de a vă elibera în PSET. Pentru că dacă serverele nu alerga pentru PSET, care va fi foarte, foarte rău. Mă duc să plutească în jurul valorii de și vezi ce toată lumea lucrează la. Cum stă treaba? Audiența: Tocmai am întors de pe computerul meu. ANDI Peng: Asta e OK. Audiența: [neauzit]. ANDI Peng: Doar IDE dumneavoastră. Da. Audiența: [neauzit]. ANDI Peng: E ​​OK. Audiența: [neauzit]. ANDI Peng: Total amendă. Este toată lumea accesarea serverul lor OK web? Este apache50 rulează bine? Cred că în unele dintre alte secțiuni, am a avut probleme cu oamenii nu posibilitatea de a accesa serverul. Da. Deci, doar tu a alerga apache50 spațiu începe perioada de spațiu. Audiența: [neauzit]. ANDI Peng: Da. Bine? Audiența: [neauzit]. ANDI Peng: Oh, OK. Deci tu ar trebui să aibă un spațiu. Deci apache50-- Audiența: Am făcut-o. ANDI Peng: spațiu --start. Audiența: Oh, spațiu punct. ANDI Peng: Da, spațiu punct. Nu te duci. Deci, atunci, dacă aveți o pagină HTML creat, atunci poti sa te duci doar direct la link-ul pe care îl specifică. Și ar trebui să fie capabil să-l acceseze. Toată lumea fost în măsură să accesa paginile lor web OK? Audiența: [neauzit]. ANDI Peng: Oh, asta e OK. Audiența: [neauzit]. ANDI Peng: Da. Cred că aveți posibilitatea să deschideți de fapt acesta, în browser-ul dvs., browser și nu doar browser-ul dvs. IDE. Da, cred că dacă copiați și lipiți-l. Audiența: Și apoi cum am opri? [Inaudibil] ANDI Peng: Da, faci apache50 opri cu nici o perioadă. Da. Audiența: [neauzit]. ANDI Peng: Cu nici o perioadă. Da. Nu mergem. Da. Ne crearea propriile noastre pagini web. Audiența: Oh, rece. ANDI Peng: Da. Audiența: Am o întrebare. Deci apache 50-- ANDI Peng: 50, da. Audiența: [neauzit]. ANDI Peng: Ce? Asta este ciudat. Vezi, asta a fost un fel de problema ce se întâmpla înainte. BINE. Vezi mine după secțiune. Pentru că noi avem unele probleme cu serverul. Și doriți să faceți vă că server-ul dvs. este rulează înainte de a începe PSET. Pentru că ai de gând să nevoie de ea. Da. Mai este cineva care nu a fost capabil de a obține serverul lor de a începe? Pentru aceia dintre dvs. care doresc să adauge Stilul suplimentare pentru paginile dvs. de web, putem face de fapt ceea ce David a făcut în curs, precum și, care este un stil suplimentar crearea foaie, care este un punct CSS, Cascading Foaie de stil și de fapt doar adauga in. Deci, de exemplu, am creat doar destul de mult aproape același cu cel exact David a făcut în curs. Puteți destul de mult face doar corpul. Aveți ceea ce se numesc tag-uri în care puteți aplica la orice IDE secțiunea vrei în dumneavoastră efectivă la pagina HTML. Deci, corpul a paginii, vă poate face centru alin text. Și apoi voi creative o etichetă numită top în interiorul din care vreau aceste lucruri se întâmplă, atribui o dimensiune mai mare de pixeli pentru fontul. Vreau greutate font pentru a fi aldine. Și vreau culoarea la fie albastru, doar arbitrar valori pe care am decis sa aleg. Pot crea un alt tag numit de mijloc. Dimensiunea fontului, face un pic mai mic. Și apoi eu pot crea un alt tag numit de jos în cazul în care vreau dimensiunea fontului să fie chiar mai mici încă. Și așa destul de mult acest lucru este doar exemplu de cod sursă sau sursă foi de stil că este foarte ușor de doar Google. Dacă spui, oh, vreau font meu care urmează să fie înclinat și verde închis, puteți probabil Google, și apoi vă va spune Tag-urile sau ID-urile corespunzătoare pentru a crea. Și astfel modul în care le-ar de fapt fel de au această intr-un document HTML sau de a folosi este tot ce trebuie de a face aici, se află în fruntea adăuga un link la foaia de stil. Astfel încât să puteți conecta doar egali href indiferent de numele dvs. de foaie de stil este. Și apoi relația este o foaie de stil. Deci, în orice document HTML, atâta timp în timp ce includ această foaie CSS punct, ar trebui să puteți accesa și au proprietăți acolo. Deci, de exemplu, aici tocmai am a crea altă pagină web exemplu. Acest lucru este binevenit la secțiunea CS50 Marți de la 02:00 la 03:30 cu mine. Și apoi m-am adăugat o imagine frumoasă care ne potențial ar trebui să poată vedea. Deci, dacă aruncăm o privire aici, dacă te duci la style.html, am creat o pagină web cu pisoi. Deoarece pisoi sunt minunat. Deci, adăugând o imagine este doar img link SRC. Destul de mult, dacă e orice fel de facilitate doriți să adăugați dvs. website-- Să spunem, doriți să adăugați un meniu sau un bar de căutare sau ca un image-- doar Google cum să faci asta. Și tu Plop în format. Și tu poți doar destul de mult doar adauga in. Este foarte, foarte usor. Suntem crearea de propria pagini web chiar acum. Dacă dorești-- Audiența: [inaudibil] ANDI Peng: Îmi pare rău? Audiența: [neauzit]. ANDI Peng: Oh, div este doar o divizie spunându-mi că, oh, am o anumită secțiune numită mijloc în care aplic tag meu CSS, și apoi alte divizare mea cu partea de jos. Asta e tot ce îți spune. Pentru că e frumos să păstreze lucruri îngrijite în ordine, astfel încât programul știe cum exact pentru a rula. Și cred că pot copia inserați acest în browser-ul meu actual, de asemenea. Ar trebui să fie în regulă. Da. Ura. Deci, dacă toată lumea vrea să doar încercați să creați o pagină web, vom lua încă două-trei minute. Vreau doar să vă asigurați Serverele tuturor rulează și toată lumea are un idee despre cum să faci asta. Dacă vreți să scoate computerele. Încă nu funcționează? Audiența: Sunt doar [neauzit]. ANDI Peng: Poate încerca să actualizeze 50, de asemenea. Da. Audiența: [neauzit]. ANDI Peng: Da. Deci modul în care începe o nouă server web pe IDE este doar face apache50 spațiu start spațiu punct. Am vrut doar să vă asigurați că Serverele tuturor se execută OK. Audiența: Aici, pe terminalul? ANDI Peng: Da. Audiența: [neauzit]. ANDI Peng: Apache. De fapt, cred că ești rulează deja ceva. Da, tu ești de fapt rulează un server diferit. Da, ești bun. Atâta timp cât funcționează, ești OK. Audiența: OK. ANDI Peng: Sunt două moduri de a rula servere. Deci, atâta timp cât unul dintre modurile este de lucru, e în regulă. Vom lua un minut doar să fel de a termina până ultimele retușuri, indiferent de Pagina web voi a vrut să facă. Este toată lumea de lucru de drum? Serverele tuturor sunt funcționare în afară de a ta? Vom seama de asta. Și lui HTML destul de simplu. Deci, eu cred că suntem bine. Da. Ma voi intoarce. Audiența: [neauzit]. ANDI Peng: OK. Audiența: Deci e doar a început să încărcați până. ANDI Peng: Nu vă faceți griji. Deci HTML, nu e cod sursă care va fi online după secțiune. De asemenea, David are un întreg buchet on-line, de asemenea. Doar un fel de privire peste ea la a vedea cum sunt scrise paginile HTML. Este destul de ușor. Ceva ce nu știu, tu destul de de mult doar Google si tu esti bine. Vreau doar să vă asigurați că serverele dvs. sunt difuzate. Audiența: Are face acest lucru de multe ori? ANDI Peng: Nu e niciodată sa întâmplat cu mine. Nu știam că ar putea hibernare chiar. Audiența: [neauzit]. ANDI Peng: Cred că everyone-- mea nu a hibernat înainte. Și nu știu de ce. E ciudat. Audiența: [neauzit]. ANDI Peng: este a ta hibernare? Audiența: [neauzit]. ANDI Peng: Da. Audiența: E OK. Deci odată ce e deschis. ANDI Peng: OK. Ne vom ocupa de un server probleme după secțiunea. Tu ar trebui să fie în regulă. Deși, doriți să vă asigurați că sa le rezolvate înainte de a pleca. Pentru că dacă server-ul dvs. de nu rulează, atunci esti nu va fi capabil să facă PSET, ca orice parte a PSET. Deci, doriți să vă asigurați că lucrează. Misto. In regula. Spune pisoi la revedere. Am petrecut mult timp în căutarea pentru care poza pisoi pentru a pune pe. Deci, oricum. Audiența: [neauzit]. ANDI Peng: Îmi pare rău? Audiența: [neauzit]. ANDI Peng: Cred că este pe site-ul. Ca spec? Audiența: [neauzit]. Cred că spec este doar on-line în săptămâna de șapte. Cred că se numește pset6, chiar deși suntem pe săptămână șapte, care este un pic de calcul. Audiența: Dar vreau să spun, dacă vrei să te uiți at-- dacă doresc să trage versiune noastre de site-ul web de la Sever nostru? Deci ca server.c este PSET, nu? Dacă vrei să te uiți la asta, cum ar fi modul se verifică? ANDI Peng: Oh, așa de fapt PSET, toate facem aici este implementing-- aici, Voi trece peste acest scurt. Deci, pentru toată lumea că e doar ajuns la sectiunea, voi sunteți în noroc. Nu este un material foarte puțin pentru a acoperi de fapt astăzi. Mă duc să-și petreacă următoarea 20 de minute trecând peste PSET ajutor. Pentru că există unele utile funcții care vor ajuta viața ta. Și sperăm, vom fi în de aici, în ca 20 de minute. BINE. Deci pset7 este greșit. Chiar dacă suntem pe săptămână șapte, este de fapt pset6. Voi schimba asta. Tot ce facem în pset6 este de a crea un server de web. Sună foarte înfricoșător. Și mai ales pentru cei dintre voi care au deja sa uitat la codul de distribuție, există o mulțime de cod, o mulțime de cod. Dar este total OK. Deoarece curajos nitty parte din efectiv a crea serverul se face de către noi. Tot ce într-adevăr a cerut să facă în acest PSET este doar pentru a face unele manipulare șir în fișier I / O. Este de fapt ca destul de simplu. Deci, atunci când descărcați prima that-- care aici are de fapt deja descărcat PSET și a luat o privire? In regula. Da. Nu e ca și cum 500 de linii de cod care ai de gând să fie ca, Ce se întâmplă? Și asta e în regulă. Asigurați-vă că urmăriți Walk-throughs. Pentru că David si-- eu nu știu. Nu cred că e de Zamyla, aceasta. Dar cred că un alt Walk-through sunt destul de de ajutor în ceea ce privește doar permițându-vă să știi ceea ce se întâmplă în interiorul codului. Și este absolut OK. Deoarece cele patru funcții pe care sunteți a cerut să pună în aplicare de fapt, au zero, de a face cu serverul actuale. Tot ce trebuie sa faci este doar parsarea diferite siruri de caractere, căutarea prin siruri de caractere, să se asigure că lucrurile fac ceea ce ei ar trebui să faci. Deci, în acest sens, există unele funcții foarte, foarte utile, în special pentru string manipulare, că ar trebui să ne toți du-te peste faptul că m-am gândit fi foarte util pentru voi pentru a afla înainte de a încerca PSET. Și sunt cuprinse toate în biblioteca string.h. Există, probabil, mult mai util Funcțiile nu am inclus aici, pentru că fie nu le folosesc sau poate că pur și simplu nu știam că există. Simțiți-vă liber pentru a privire prin student.h. Pentru că nu va fi o mulțime de funcții, care sunt foarte utile. Deci, șase pe care am folosi cel mai mult în meu PSET când făceam o în această săptămână trecut au fost strtok, strchr, strrcher, strstr, strcasecmp, și strcpy. Și astfel ultimele două poate părea destul de familiar pentru majoritatea dintre voi. Caz Str compara, tot ce face este compara siruri de caractere pentru a le verifica pentru egalitate, inclusiv caz. Și strcpy doar copii o string într-un tampon. Și așa ar trebui să cei doi par a fi foarte familiar pentru voi în acest moment. Pentru că le-am folosit foarte mult, în special pentru ultimele psets. Dar primele patru, probabil, nu ați văzut până acum. Dar am de gând să meargă doar prin ele. Pentru că ei vor să facă viața voastră foarte, foarte ușor, nu for-- ușor, dar mult mai ușor pentru acest PSET viitoare. BINE. Deci, char * strtok, aceasta este funcția definitie pentru această funcție a conținut în șir, biblioteca h. Dacă vi se administrează o intrare de char * string, care este doar un șir de caractere, sau un char * constant deliminator, delim pe scurt, tot ce face este de rupere mai mare string într-o serie de ceea ce noi numim jetoane separate de o anumită valoare. Deci, într-un sens, dacă ar fi să dau te section.7.php, acest este un șir. Deci care ar fi dacă aș trece în acest lucru ca str meu, char meu * Str, dacă deliminator mea a fost punct, toate acestea ar face este căutarea prin șir. Și prima dată când vede un punct, ar reveni doar la indicatorul la ultima jetonul găsit în șir, înainte de acest lucru. Asa ca ar merge chiar aici. Și ar da mi 7.php. Și dacă aș fi pentru a apela funcționeze încă o dată, mi-ar da doar .php. Și atunci tot această funcție este de a face este de rupere jos șirul mai mare în siruri de caractere mai mici, în funcție pe ceea ce căutați. Și astfel, de exemplu, în funcția Look Up dacă vrei să te uiți la ceea ce anumite caractere întâmpla sau în cazul în care se întâmplă puncte sau extensii se întâmple, Această funcție ar fi destul de util. Da. Fără griji. Acest lucru va toate be-- Da, ce mai faci? Audiența: Deci, în primul rând, dacă am fost folosind acest exemplu, ceea ce ne-ar introduce în asta? ANDI Peng: Da. Ați numi doar un strtok delim șir virgulă. Și șir este egală cu section.7.php. Și atunci esti delim ar putea fi egală cu dot doar. Audiența: OK. ANDI Peng: Da. Exact așa. Toate aceste funcții sunt destul de similară atunci când trecem prin ele. Ei fac doar lucruri ușor diferite. Dar toate sunt de gând să face viata mult mai ușor. A doua funcție, asta e ca super, super, super-importante, este the-- rezista. Oops. Cautari Strchr pentru prima occurrence-- de fapt, da. Strchr este funcția pe care Eu cu siguranta doar dus peste. Deci, ignora ceea ce am spus pentru prima funcție. De fapt, numit strchr. Deci, ce s-ar întâmplat aici este dacă s-au dat un șir într-un char C, s-ar da doar ai tot ce a fost. Da. Deci, cred că de ea ca str, care este un șir de caractere, și chr ca char. Deci tot ce încerci să faci este căutare pentru cazul în care un char este într-un șir. Și așa caută primul apariție a caracterului C în str șir. Audiența: [neauzit]. ANDI Peng: Da. Și apoi, dacă aceasta nu a găsit ea, o să se întoarcă NULL. Deci ceva care va fi foarte util pentru voi în a face PSET dacă, să zicem, pe care o căutați o prelungire ca un .docx un cuvânt document sau un .pdf pentru un document PDF, puteți fel de utiliza pentru a căuta pentru tot ceea ce este după aceea de fiecare dată când vedeți un punct, nu? Și așa destul de mult, dacă alerga că, prin funcția, în cazul în care se întoarce NULL, atunci știți că nu-l găsiți punct, ceea ce înseamnă că acest în mod clar nu este o extensie de fișier valid. Sau dacă se întoarce ceva, atunci știi se va reveni la orice de de fapt, după extinderea. Deci cei dintre voi care au avut a început să caute prin căutare și analiza, această funcție a va fi foarte util. Așa că de fapt merge pentru a demonstra utilizarea acestui. De ce nu voi încearcă să scrii un Funcția bool char * s frază care doar returneaza true daca s este un teză și false în caz contrar. Deci sugestie, te duci de a utiliza, probabil, strchr. Sau doar Caută în string pentru un anumit caracter. Și așa mai departe într-o propoziție, ceea ce separă o propoziție de la un non-teză, ce caracter specific? Audiența: Un spațiu. ANDI Peng: un spațiu, nu? Și ce facem, probabil, va vrei să faci în această funcție aici? Audiența: [neauzit]. ANDI Peng: Vom vrea să strchr șir de apariția spațiului. Pentru că dacă se întoarce ceva, atunci știm că acest lucru trebuie să fie o propoziție. Asta înseamnă că trebuie să ne au un spațiu în acest șir. Dacă nu există spațiu, atunci știm că, hei, cred că nu e un șir. Este, probabil, doar un cuvânt foarte lung. Așa că voi da un cuplu baieti minute pentru a scrie această funcție. Da. Audiența: Ai acest șir de utilizator? ANDI Peng: Da. Deci, aceasta este doar o funcție. Deci, imaginați-vă în interiorul funcția principală ai deja have-- să mergem aici. BINE. Așa că am scris acest program în cazul în care Am principal funcția mea în cazul în care Tocmai am creat două șiruri. Prima dintre ele este Salut, numele meu este în mod clar Andi--, o propoziție. Al doilea meu este doar Andi, în mod clar nu condamna. Și așa că eu sunt difuzate atât a celor siruri de caractere, prin această funcție. Vreau ca voi să scrie propoziții rece. Și eu stocarea acestor valori, și apoi doar tipărirea le. Deci cred că utilizatorul este O să treacă într-un șir. Si apoi vei esență dau seama dacă e sau nu o propoziție și să se întoarcă adevărat sau fals în consecință. Dacă vreți să dea un Thumbs up sau heads-up, da din cap, este cineva e gata să înceapă acest, că ar fi bine. Poate ca 30 de secunde? Mai multe In regula. Să vedem dacă puteți încerca scris această funcție. Deci, pseudo coding-- Mă duc la un fel de plimbare prin asta acum. Destul de mult, știm Funcția de care avem nevoie pentru a utiliza. Vom apela această funcție pe șir si cauta un spatiu nostru. În cazul în care se întoarce ceva, atunci trebuie să ne Știu că, în mod clar, aceasta este o propoziție. Pentru că nu e spații. Apoi vom reveni adevărat. Altfel, vom reveni false. Nimeni nu vrea să dea mi prima linie de cod că suntem de fapt de gând pentru a utiliza pentru a scrie acest lucru? Este de fapt cel mai greu linie de cod, de asemenea. Da. Audiența: Dacă strtok S- ANDI Peng: Doar strchr. Audiența: [interpunerea VOCI] spațiul nu este egal cu NULL. ANDI Peng: cool. Exact dreapta. Toată lumea înțelege că prima linie? Vom apela la strstr, care este o funcție care caută sirul s pentru char de spațiu. Și dacă o găsește, o să reveni un pointer la unde este. În cazul în care nu-l găsiți, se va întoarce NULL pentru a. Deci, în cazul în care se întoarce altceva decât NULL, atunci știm că a găsit un spațiu. Are sens? Misto. In regula. Deci, dacă știm că a găsit un spațiu, ceea ce vrem să facem? Audiența: return true. ANDI Peng: Da. Return true. Și apoi, cineva vrea să termina funcția de mine? Da. Altfel, la fel ca asta. Și să încerce realizarea acestui. Da. Deci, ca voi poate vedea din ieșiri, amintiți-vă Booleans în C sunt întotdeauna exprimate în binar. 1 este adevărat. 0 este falsă. Dacă ar fi pentru a rula acest Funcția pe string o, care este Buna, numele meu este Andi-- în mod clar, un sentence-- rezultatul imprimate la 1, care este adevărat. Al doilea, care este doar un cuvânt, rezultatul imprimate la 0, ceea ce este fals. Toată lumea fel de clar cu privire la modul Această funcție a fost scris? Da. Audiența: Putem face, de asemenea, în loc de nu Același, egal este egal cu 0, astfel că este egal cu? ANDI Peng: Nu. Deoarece strchr este o funcție. Am de gând să sprijine în acest sens. Deci, ce este de tipul de retur de funcția noastră strchr? Audiența: Oh, OK. Sau NULL. ANDI Peng: Da. Este un char * care mi-a spus că, indiferent de Această funcție se va să se întoarcă, se va fi un pointer. Fie indicatorul va fi arătând unde este găsit, sau va pentru a reveni un pointer la NULL. În oricare caz, se va pentru a reveni un pointer la ceva. Și așa dacă ar fi să echivala acest egal, egal, 0, ai de gând pentru a obține o eroare de compilare. Pentru că o să se întoarcă un pointer. Și ai de gând să încerce să compara un pointer la un întreg. Și calculatorul nu este va plăcea asta. Da, exact. Misto. Toată lumea bună? Și în al doilea rând, vom merge pe o funcție numită strstr. Nu vă faceți griji dacă acestea Funcțiile sunt confuze tine. Mă confuz. Ca atare, voi ar fi putut vedea, toate acestea suna cam la fel. Doar atunci când ești confuz, trageți în sus biblioteca string.h. Și voi puteți sorta prin care cuiva care. Deci strstr, tot ceea ce face este căutările un șir de alte șir întreg. Deci, unde strchr doar căutări pentru un singur caracter, Cautari strstr pentru o întreagă șir. Așa că am vrut să se uite la, eu nu Știu, Buna, numele meu este Andi. Și numele prietenului meu cel mai bun este, de asemenea Andi. Dacă aș fi vrut să caute în acest teză pentru întregul cuvânt de Andi, ac mea ar fi fost indiferent de ce căutați. Și carul cu fân este indiferent sunteți în căutarea pentru el în. Deci, dacă sunteți în căutarea pentru o cuvânt specific într-o propoziție, acel cuvânt va fi ac dumneavoastră. Și apoi sentința în sine va fi carul cu fân dumneavoastră. Și așa doar caută prima apariție acului string în carul cu fân șir. Se întoarce indicatorul la prima apariție. Cu excepția, amintiți-vă în acest caz, că este vorba de prima apariție a întregul șir pe care le căutați pentru, nu doar un caracter. Și astfel încât acesta este aproape același lucru ca și funcția tocmai am făcut-o, doar cu un pic mai mult specificitate. Pentru că sunteți în căutare de mai mult decât un caracter. Și utilizarea este exact același lucru ca cel pe care tocmai l-am făcut. Toată lumea OK cu asta? BINE. Ultima vom merge peste este strrchr, care nu este confundat cu strstr sau cu strchr. strrchr are un r plus acolo. Fiți atenți atunci când sunteți tastați. Ați putea găsi te, inclusiv un R în plus nu include o r, și apoi funcția nu a fost de gând să lucreze. Și ai de gând să fie confuz. Fii atent că sunteți ortografie toate aceste funcții chiar. Deci strrchr este exact același lucru ca și strchr cu excepția că nu caută primul apariție a unui caracter specific, ci mai degrabă ultima apariție. Și astfel, în acest sens, este aproape exact aceeași. Dar, în loc de mișcare înainte într-un șir de caractere, ai de gând să fie în mișcare înapoi într-un șir. Exact același lucru, ești doar căutarea într-o ordine diferită. Și așa ar putea fi super, foarte util pentru dvs. de căutare Funcția, primul Funcția pe PSET dumneavoastră. Să ne prefacem că avem nevoie pentru a scrie un în funcție de extensie gol în care ne-am treci un nume de fișier * char constant, doar un șir de caractere, un nume de fișier, care ia în acest nume și imprimă din extinderea acelui fișier. Deci, de exemplu, dacă ar fi să trece în șirul de pset7.zip, se va imprima doar extensia, care este zip. Și acest lucru ar lucra pentru orice fel de prelungire, .docx pentru Word sau .pdf pentru un PDF fișier sau .html pentru un fișier HTML. Destul de mult, scrie funcție care poate face asta. Sunt de fapt de gând să comuta pe IDE. Nu este load-- acolo mergem. Deci tot ce am făcut aici este a creat un char *, un prim șir, numit pset7.zip. Am de gând pentru a mări. Am creat un al doilea șir numit finalpaper.docx. Si scrie-mi o funcție ca, atunci cand chemat va imprima doar din extensiile numele fișierului. Poate dura câteva minute să se gândească despre cum ai de gând să faci asta. Puțin mai provocatoare decât ultima, dar utilizarea este aproape exact aceeași. Da. Deci, scrie o extensie funcție numită că, dacă ți-aș da numele unui fișier, dacă ar fi să vă dau pset7.zip-- I Vreau să imprimați doar .zip. Dacă dau vă place finalpaper.docx, doar imprima .docx, doar extensia de orice fișier. Acest fapt, doar ia două linii de cod. Deci, încercați pentru a vedea dacă poate poate face acest lucru în asta. De fapt, doar ia o linie de cod. Dar două linii este, probabil, mai mult standardul. Ce funcție suntem, probabil, de gând să doriți pentru a apela? Audiența: strrchr. ANDI Peng: strrchr, dreapta. Pentru că suntem în căutarea de la stânga dreapta. N-am să vă dau baieti un exemplu de acest fel, dar dacă ți-am dat un exemplu ca www.apple.com și am vrut doar .com, că ar fi un exemplu de unde doriți să apelați ultimă instanță perioadei și nu prima, nu? Dacă ai fi fost strchr numesc, te-ar fi dat Apple.com. Dacă te-a chemat strrchr l, ai fi dat .com. Și astfel încât să fie atent pe care ways-- în exemplul meu, ai putea avea, probabil, ar putea doar scris folosind strchr, deoarece există o singură punct. Dar în alte cazuri, care nu poate fi cazul. Și așa mereu încerca să proiecteze codul bine, așa that-- da? Audiența: Deci, în exemplu tocmai ai spus, atunci când faci strrchr ca ar fi da .com sau doar vin? ANDI Peng: Acesta vă va oferi .com. Audiența: OK. ANDI Peng: Da. Se indică în cazul în care a găsit. Da. 30 de secunde, poate? Da. Toată lumea bună sau poate un pic mai mult timp? Spectacol de mâini? Arată de capete? Misto. Oricine vrea să-mi dea primul linie de cod pentru acest program? Audiența: [neauzit]. ANDI Peng: Deci în primul rând, hai poate rupe acest jos. Deci, ce este de tipul de întoarcere de strrchr? Hai sa ne intoarcem. strrchr, ceea ce este tipul de întoarcere? Audiența: Char * ANDI Peng: E ​​un char *, nu? Ceea ce înseamnă că te, probabil, va pentru a doriți să creați un alt char * la fel de magazin ori de câte ori este revenind la, dreapta? Pentru că dacă te sun strrchr funcție, este de gând să vă dau un pointer la ori de câte ori se constată că ultima perioadă, dreapta? Dar ai de gând să doriți să stoca că undeva, nu? Și așa cum putem cod acest lucru în programul nostru? Audiența: Tu faci char * [neauzit]. ANDI Peng: Da. Audiența: [neauzit]. ANDI Peng: strrchr. Da. Oh, a ratat un r acolo. Audiența: Nume fișier [neauzit]. Ce este? Oh, e doar e. ANDI Peng: Oh, e doar e. Da, îmi pare rău. Greșeala mea. Exemplele nu se potrivesc. Audiența: Și apoi dot. ANDI Peng: Da. Fiți atenți atunci când voi are-- aici, lasă-mă să măriți. Nu mergem. Fiți atenți atunci când voi tastați, mai ales atunci când faci doar o char. Este foarte ușor să accidental doar face ghilimele duble, mai degrabă decât o singură. Că nu va funcționa. Compilator dvs. va plânge. Și funcția dumneavoastră este pur si simplu nu merge pentru a rula. Și așa fie atenți atunci când faci lucruri cu caractere că este ghilimele simple. Și așa face această linie de cod sens pentru toată lumea? Suntem crearea unui char * pointer. Deoarece se întoarce strrchr ceva de tip pointer. Și așa vom apela la strchr pe s, care este șirul, fișierul nume, că ne trece în. Și suntem în căutarea pentru ultima instanță a unei perioade, care este doar citat singur punct unic citat. Da. Audiența: Când folosim ghilimele și când folosim ghilimele simple? ANDI Peng: Da. Citate Deci duble sunt folosit întotdeauna când au un șir de mai mult decât unul. Deci, dacă faci strstr, care este cea care te căuta un șir de șir, ai ar trece în ghilimele. Dar în orice moment e doar un singur caracter, vrei sa faci ghilimele simple. E un lucru bun de a păstra în minte. Deci, acum că ne-am nostru pointer, ce facem cu ea? Îți cer voi să imprimarea l, nu? Deci [auzite], pe care doriți să da-mi linia de cod? Audiența: printf-- ANDI Peng: Da. Audiența: --you nevoie de un loc de titular. ANDI Peng: Da. Audiența: Print titularul loc. Nu știu ce locul titularul este dar punctul să-l. BINE. Să skip că pentru moment, apoi. Audiența: Și apoi comma-- ANDI Peng: Pointer, nu? Audiența: Pointer, Da. ANDI Peng: Deci un fel de întrebare capcană, are de a face cu indicii si siruri de caractere că am un fel de vorbit despre deja. Ce fel de loc de titular facem nevoie pentru un pointer pentru un char *? Audiența: [neauzit]. ANDI Peng: Da. E mai ușor decât voi cred că este. Audiența: String? ANDI Peng: E ​​doar un șir de caractere, exact. Deoarece amintesc siruri de caractere nu există cu adevărat. O char * este exact același lucru ca un șir. Și așa mai departe într-adevăr acest lucru este ceea ce s ar fi trebuit folosite tot timpul. BINE. Să vedem dacă putem încerca rulează acest lucru. Să facem o extensie face. Misto. Voi vedea cum am votat în psset7.zip și finalpaper.docx, și doar imprimă .zip și .docx? Are sens? OK Deci, cred că în look-ul în sus funcție în PSET dumneavoastră sunteți va fi întrebat dacă string are un anumit final, va trebui să dea un anumit cod de eroare. Și așa va fi destul de groaznic. Pentru că dacă vă puteți da seama ce extensia este, atunci puteți compara că extensie pentru a vedea dacă se potrivește cu o anumită extensie. Și apoi vă puteți întoarce un mesaj de eroare, nu? Da. Audiența: Deci, noi nu trebuie să adăugați 1 sau ceva? Indicatorul va merge la the-- ANDI Peng: Nope. Audiența: --point după el. ANDI Peng: Da. Aceasta subliniază exact unde apariția fost. Deci, de exemplu aici, suntem căutarea perioada. Asa ca va să se întoarcă un pointer la perioada. Și apoi o să imprime pornind de la perioada. Deci nu este nevoie să adăugați 1. Deși, este absolut în regulă la, în cazul în care ești vreodată sigur, la doar un fel de a testa în tine. Construi un program de probă. Testați-l singur și vezi în cazul în care este de imprimare. Asta nu e, de asemenea, o modalitate de rău de a face acest lucru. Misto. Și asta e destul de mult tot Am avut pentru voi astăzi. Am făcut o mulțime de lucruri PSET astăzi. Deci, atunci când în dubiu, ca I-am spus, uita-te mereu biblioteca string.h pentru acest PSET. Nu va fi o mulțime de Funcția acolo care pot fi utile. Unii nu pot fi utile. Nu prea știu. Wade prin ea, nu e o grămadă de ele. strstr, strchr, strrchr sunt super, super-util, precum și de strcpys și strcasecmps pe care le-am folosit deja. E doar mulțime de în jur de joc cu siruri de caractere, a determina dacă acestea sunt egale, obtinerea lucruri de siruri de caractere, și posibilitatea de a deschide fișiere în mod corect. Este o mulțime de fișier I / O. PSET nu e chiar așa de rău. Ai de gând să ia o uita-te la ea, descărcați-l, și a vedea o grămadă de cod. Nu vă faceți griji, codul pe care îl de fapt, scrie nu este rău deloc. Dacă cineva are probleme cu lor Server, vii să mă vezi după secțiune. Cer scuze încă o dată pentru a nu aducând bomboane la Halloween. Nu știu ce a fost în neregulă cu mine. Dar vom avea dubla bomboane data viitoare. Și noroc în PSET dvs. în această săptămână. Da.