1 00:00:00,000 --> 00:00:00,720 2 00:00:00,720 --> 00:00:03,190 >> DAVID J. MALAN: Anta att jag skulle vilja att genomföra ett program som uppmanar 3 00:00:03,190 --> 00:00:06,650 användaren efter en sträng och sedan fortsätter att kapitalisera sin ingång, 4 00:00:06,650 --> 00:00:09,790 konvertera alla gemener att de skriver till versaler. 5 00:00:09,790 --> 00:00:11,770 Nåväl, låt oss gå vidare och genomföra detta program. 6 00:00:11,770 --> 00:00:18,760 >> Låt oss först inkludera cs50.h följt genom inkludera stdio.h. 7 00:00:18,760 --> 00:00:23,990 Och så att vi kan använda strlen, låt oss inkludera string.h. 8 00:00:23,990 --> 00:00:29,860 >> Låt oss nästa förklara huvud som int main tomrum och låt oss nu fortsätta att uppmana 9 00:00:29,860 --> 00:00:31,600 användaren för en sträng. 10 00:00:31,600 --> 00:00:34,840 Printf, låt oss få dem för lite input. 11 00:00:34,840 --> 00:00:36,460 Nu ska vi deklarera en sträng - 12 00:00:36,460 --> 00:00:37,630 vi kallar det är - 13 00:00:37,630 --> 00:00:44,010 och lagra i det resultatet av att ringa den CS50 biblioteksfunktion GetString. 14 00:00:44,010 --> 00:00:48,850 >> Låt oss nu gå vidare för att iterera över varje av karaktärerna i s, kapitalisera 15 00:00:48,850 --> 00:00:50,650 några små bokstäver som vi ser. 16 00:00:50,650 --> 00:00:53,630 För int, jag får 0. 17 00:00:53,630 --> 00:00:58,780 Låt oss också deklarera n som är lika med strängens längd s, så att vi kan 18 00:00:58,780 --> 00:01:03,590 iterera från i upp till n, den längd s, och på varje 19 00:01:03,590 --> 00:01:05,760 iteration inkrement i.. 20 00:01:05,760 --> 00:01:09,970 >> Och sedan insidan av denna slinga, låt oss första kontrollen är den aktuella bokstaven - 21 00:01:09,970 --> 00:01:12,270 det i: te skrivelse av s, så att säga - 22 00:01:12,270 --> 00:01:14,170 en liten bokstav. 23 00:01:14,170 --> 00:01:23,090 Om s bygel i är större än eller lika till gemener en, och det är mindre 24 00:01:23,090 --> 00:01:26,900 än eller lika med gemener z - 25 00:01:26,900 --> 00:01:30,860 Om vi ​​nu vill konvertera ett gement brev till versaler, minns först att 26 00:01:30,860 --> 00:01:35,810 i ASCII ett gement a är 97 och ett versalt A är 65. 27 00:01:35,810 --> 00:01:41,020 Samtidigt är ett gement b 98, och ett versalt B är 66. 28 00:01:41,020 --> 00:01:44,180 >> Om vi ​​fortsätter att titta på detta mönster, Vi ser att den gemena 29 00:01:44,180 --> 00:01:49,240 bokstäverna är alltid 32 värden högre än versaler. 30 00:01:49,240 --> 00:01:53,490 Så om vi vill konvertera från gemener till versaler, bör det 31 00:01:53,490 --> 00:01:57,210 räcka, egentligen, att subtrahera 32 från användarens input. 32 00:01:57,210 --> 00:02:01,330 , Eller mer generellt, bara subtrahera det Skillnaden mellan ett gement a och en 33 00:02:01,330 --> 00:02:02,310 kapital A. 34 00:02:02,310 --> 00:02:03,410 >> Så för att uttrycka det? 35 00:02:03,410 --> 00:02:04,640 Nåväl, låt oss göra det i kod. 36 00:02:04,640 --> 00:02:09,960 Printf, citat, unquote "% c" för att skriva ut det aktuella tecknet, följt av 37 00:02:09,960 --> 00:02:18,500 utskrift vad är i s fäste i minus resultatet av att göra gemener a 38 00:02:18,500 --> 00:02:22,660 minus versaler En semikolon. 39 00:02:22,660 --> 00:02:27,010 Med andra ord är denna parent uttryck, lite ett minus stort A, är 40 00:02:27,010 --> 00:02:29,360 kommer att återvända till oss på I slutet av dagen 32. 41 00:02:29,360 --> 00:02:31,230 Men jag behöver inte komma ihåg att det är 32. 42 00:02:31,230 --> 00:02:34,150 Jag kan låta datorn räkna ut vad skillnaden mellan gemener 43 00:02:34,150 --> 00:02:35,990 a och kapital A är. 44 00:02:35,990 --> 00:02:39,610 >> Under tiden, när jag vet att skillnaden, Jag kan subtrahera det från s 45 00:02:39,610 --> 00:02:43,710 fäste i, som tar vad som finns förmodligen en liten bokstav till en 46 00:02:43,710 --> 00:02:48,100 lägre värde, det vill säga ett värde som mappar på en versal motsvarighet. 47 00:02:48,100 --> 00:02:51,240 Låt oss nu spara, kompilera, och köra programmet. 48 00:02:51,240 --> 00:02:57,760 Gör kapitalisera prick snedstreck aktiverats. 49 00:02:57,760 --> 00:03:01,290 Och min ingång blir hej. 50 00:03:01,290 --> 00:03:02,920 Och där har vi, hej. 51 00:03:02,920 --> 00:03:05,570 >> Nu är min prompt visserligen är lite fult, därför att vi har 52 00:03:05,570 --> 00:03:07,810 utelämnade en bit av utskrift. 53 00:03:07,810 --> 00:03:09,370 Och låt oss gå tillbaka och lägga till det. 54 00:03:09,370 --> 00:03:12,890 Längst ner i detta program, Jag är mycket enkelt, och till stor del för 55 00:03:12,890 --> 00:03:18,440 estetiska ändamål, kommer att lägga till printf, citat, unquote omvänt snedstreck n. 56 00:03:18,440 --> 00:03:22,330 Låt oss spara om den här filen, kompilera, repris. 57 00:03:22,330 --> 00:03:28,090 >> Gör kapitalisera, punkt snedstreck kapitalisera. 58 00:03:28,090 --> 00:03:32,540 Återigen, för inmatning jag ska ge "hej" i alla små bokstäver och nu slå Enter, 59 00:03:32,540 --> 00:03:34,550 och "Hej," mycket mer rent ut. 60 00:03:34,550 --> 00:03:36,432