Ký ttựự và và Ch Chu Chuỗỗii ký ký ttựự -- String String Phạm Thế Bảo Trường Đại học Khoa học Tự nhiên Tp HCM... Nhậ ất Ký tNhập xuất Ký tự scanf scanf char char ch ch;; scanf scanf
Trang 1Di
Di chuyển chuyển con con trỏ trỏ trong trong mảng mảng
i t
i t I tAI tA [5] {3 4 2 1 0}[5] {3 4 2 1 0}
int
int IntArrIntArr[5] = {3,4,2,1,0};[5] = {3,4,2,1,0};
char
char CharArrCharArr[5] = {‘[5] = {‘a’,’b’,’c’,’d’,’ea’,’b’,’c’,’d’,’e’};’};
i t
i t **I tPtI tPt I tA
int
int **IntPtrIntPtr = = IntArrIntArr;;
char *
char *charPtrcharPtr = = CharArrCharArr;;
Di Di chuyểnchuyển trongtrong mảngmảng 1 1 chiềuchiều::
int
int val_at_0 = * val_at_0 = * IntPtrIntPtr;; // = // = IntArrIntArr[0][0]
i t l t 3 * (I tPt +3) //l t 3 * (I tPt +3) // I tAI tA [3][3]
int
int val_at_3 = * (IntPtr+3); // = val_at_3 = * (IntPtr+3); // = IntArrIntArr[3][3]
IntPtr IntPtr+1 IntPtr+1 IntPtr+2 IntPtr+2
Trang 2Phép toán với con trỏ trong p p g g mảng
#define ROWS 5
i t
i t I tAI tA [ROWS][COLS] {{3 4 2 1 0}[ROWS][COLS] {{3 4 2 1 0}
int
int IntArrIntArr[ROWS][COLS] = {{3,4,2,1,0},[ROWS][COLS] = {{3,4,2,1,0},
{5,6,7,8,9}, {10 11 12 13 14}};
int
int **IntPtrIntPtr = = IntArrIntArr;;
ThamTham chiếuchiếu đếnđến phầnphần tửtử trongtrong mảngmảng 2 2 chiềuchiều::
int
int val_at_00 = * val_at_00 = * IntPtrIntPtr;// = ;// = IntArrIntArr[0][0][0][0]
int
int val_at_30 = * (IntPtr+3);// = val_at_30 = * (IntPtr+3);// = IntArrIntArr[3][0][3][0]
int
int val_at_32 = * (intPtr+3*5+2);// = val_at_32 = * (intPtr+3*5+2);// = IntArrIntArr[3][2][3][2] int
int val_at_32 = * ( * (IntPtr+3)val_at_32 = * ( * (IntPtr+3)
Trang 3Phép toán với con trỏ trong p p g g mảng
IntPtr
IntPtr+3
13
IntPtr + 2*5 + 3
Trang 4Ký ttựự và và Ch
Chu
Chuỗỗii ký ký ttựự String String
Phạm Thế Bảo Trường Đại học Khoa học Tự nhiên Tp HCM
Trang 5Ký tự tự (character) (character)
Ký
Ký tự tự (character) (character)
KiểuKiểu char: char:
kýký tựtự “in“in đượcđược”” gồmgồm: 26: 26 chữchữ thườngthường (a ) 26(a ) 26 chữchữ hoahoa
kýký tựtự “in “in đượcđược” ” gồmgồm: 26 : 26 chữchữ thườngthường (a z), 26 (a z), 26 chữchữ hoahoa (A Z), 10
(A Z), 10 chữchữ sốsố (0 9), (0 9), khoảngkhoảng trắngtrắng, , cáccác kýký tựtự::
! “ # $ % & ‘ ( ) * + ,
! “ # $ % & ‘ ( ) * + , / : ; < = > ? @ [ ( ) / : ; < = > ? @ [ \\ ] ^ _ { | } ~ @ ] ^ _ { | } ~ _ { | }
CácCác kýký tựtự ““khôngkhông in in đượcđược”: tab, ”: tab, lertlert (bell), newline, (bell), newline, formfeed
formfeed, ,
cáccác kýký tựtự “in “in đượcđược” ” đặcđặc biệtbiệt: ‘: ‘\\\\’, ‘’, ‘\\’’, ‘’’, ‘\\”’”’
cáccác kýký tựtự ““khôngkhông in in đượcđược” ” đặcđặc biệtbiệt: :
\\nn new linenew line
\\nn new linenew line
\\aa bell
\\00 null characternull character
\\bb b kb k
\\bb backspacebackspace
\\tt horizontal tab
Trang 6
Nhậ ất Ký t
Nhập xuất Ký tự
scanf
scanf
char
char ch ch;;
scanf scanf(“%c”, & (“%c”, &ch ch); );
sử sử dụng dụng các các đoạn đoạn macro macro có có trong trong thư thư viện viện < <stdio.h stdio.h> >
putchar
putchar:: đưa đưa ký ký tự tự ra ra thiết thiết bị bị xuất xuất chuNn chuNn ((stdout stdout))
putchar
putchar: : đưa đưa ký ký tự tự ra ra thiết thiết bị bị xuất xuất chuNn chuNn ((stdout stdout) )
putchar
putchar(‘ (‘\\n’); n’);
getchar
getchar: : lấy lấy ký ký tự tự từ từ thiết thiết bị bị nhập nhập chuNn chuNn ((stdin stdin))
ch
ch = = getchar getchar(); ();
ch
ch = = getchar getchar(); ();
getch getch: : lấy gg lấy trực yy ựự trực tiếp tiếp ký pp ýý ựự ký tự tự từ từ bàn bàn phím phím không pp không hiển gg hiển thị thị ra ịị ra màn màn hình hình
ch
ch = = getch getch(); ();
getche
getche(): (): lấy lấy trực trực tiếp tiếp ký ký tự tự từ từ bàn bàn phím phím và và hiển hiển thị thị ký ký tự tự ra ra màn màn hình hình
ch
ch = = getche getche(); ();
ch
ch getche getche(); ();
Trang 7t h
getchar
11 #include < #include <stdio h stdio h> >
1 #include < #include <stdio.h stdio.h> >
2 int int main(void) main(void) ( ( ) )
3 {{
4 int int c; c;
5 /* Note that /* Note that getchar getchar reads from reads from stdin stdin and is line buffered; this means it and is line buffered; this means it will not return until you press ENTER */
6 while ((c = while ((c = getchar getchar()) != ' ()) != '\\n') n')
7 printf printf("%c", c); ("%c", c);
t 0
t 0
8 return 0;
9 }}
Trang 81 /* /* putchar putchar example */ example */
22 #include < #include <stdio h stdio h> >
2 #include < #include <stdio.h stdio.h> >
3 /* define some box /* define some box drawing characters */ drawing characters */
7 #define VERT 0xB3
10 int int main(void) main(void)
11 {{
12 char char ii, j; , j;
13 /* draw the top of the box */
14 putchar putchar(LEFT_TOP); (LEFT_TOP);
15 for ( for (ii=0; =0; ii<10; <10; ii++) ++)
16 putchar putchar(HORIZ); (HORIZ);
Trang 917 putchar putchar(RIGHT_TOP); (RIGHT_TOP);
18 putchar putchar('('\\n'); n');
19 /* draw the middle */
20 for ( for (ii=0; =0; ii<4; <4; ii++) ++)
21 {{
22 putchar putchar(VERT); (VERT);
23 for (j=0; j<10; j++)
24 putchar putchar(' '); (' ');
25 putchar putchar(VERT); (VERT);
25 putchar putchar(VERT); (VERT);
26 putchar putchar('('\\n'); n');
27 }}
28 /* draw the bottom */
29 putchar putchar(LEFT_BOT); (LEFT_BOT);
30 for ( for (ii=0; =0; ii<10; <10; ii++) ++)
31 putchar putchar(HORIZ); (HORIZ);
31 putchar putchar(HORIZ); (HORIZ);
32 putchar putchar(RIGHT_BOT); (RIGHT_BOT);
33 putchar putchar('('\\n'); n');
34 return 0;
35 }}
Trang 10Một ố hà khá
Một số hàm khác
kbhit
kbhit kiểkiể tt óó híhí bấbấ
kbhitkbhit: : kiểmkiểm tratra cócó phímphím bấmbấm
11 /*/* khbitkhbit example */example */
1. /* /* khbitkhbit example */example */
2. #include <#include <conio.hconio.h>>
3. intint main(void)main(void)
5. cprintfcprintf("Press any key to continue:");("Press any key to continue:");
hil (!
hil (!kbhitkbhit()) /* d()) /* d thithi */*/
6. while (!while (!kbhitkbhit()) /* do nothing */ ;()) /* do nothing */ ;
7. cprintfcprintf("("\\rr\\nAnA key was pressed key was pressed \\rr\\n");n");
8. return 0;
Trang 11Ch ỗi ký t St i
Chuỗi ký tự
Chuỗi ký tự –– Strings Strings
MộtMột sốsố quiqui tắctắc
Nhậ
NhậpNhập // xuấtxuất
ConCon trỏtrỏ vàvà chuỗichuỗi kýký tựtự
MộtMột sốsố hàmhàm thưthư việnviện
Trang 12Ch ỗi ký t Mộ ố Mộ ố i ắ i ắ
Chuỗi ký tự
Ch ỗiCh ỗi kýký tt làlà ảả ộtột hiềhiề óó ỗiỗi thà hthà h hầhầ làlà ộtột
ChuỗiChuỗi kýký tựtự làlà mảngmảng mộtmột chiềuchiều cócó mỗimỗi thànhthành phầnphần làlà mộtmột số
số nguyênnguyên đượcđược kếtkết thúcthúc bởibởi sốsố 00
KýKý tựtự kếtkết thúcthúc ((00)) ởở cuốicuối chuỗichuỗi kýký tựtự thườngthường đượcđược gọigọi làlà
KýKý tựtự kếtkết thúcthúc ((00)) ởở cuốicuối chuỗichuỗi kýký tựtự thườngthường đượcđược gọigọi làlà ký
ký tựtự nullnull (không(không giốnggiống concon trỏtrỏ NULL)NULL) CóCó thểthể ghighi làlà 00 hoặc
hoặc ‘‘\\00’’ (khôngặặ (không phải(( gg ppphải chữchữ o)o) ))
ĐượcĐược khaikhai báobáo vàvà truyềntruyền thamtham sốsố nhưnhư mảngmảng mộtmột chiềuchiều
char s[100];
unsigned char s1[1000];
unsigned char s1[1000];
Trang 13Ch ỗi ký t Ví d
Chuỗi ký tự
char first_name[5] = { 'J', 'o', 'h', 'n', '\0' }; char last_name[6] = "Minor";
char other[] = "Tony Blurt";
char characters[8] = "No null";
first_name
last_name
other characters
Trang 14Ch ỗi ký t Nhậ / Nhậ / ấ ấ
CóCó thểthể nhậpnhập // xuấtxuất chuỗichuỗi kýký tựtự ss bằngbằng cáchcách nhậpnhập từngtừng kýký
Chuỗi ký tự
tự
tự củacủa ss
HoặcHoặc sửsử dụngdụng cáccác hàmhàm scanfscanf vàvà printfprintf vớivới kýký tựtự địnhđịnh dạng
dạng ““%%s”s”
char other[] = "Tony Blurt";
printf("%s\n", other);
NhậpNhập chuỗichuỗi cócó khoảngkhoảng trắngtrắng dùngdùng hàmhàm getsgets
char name[100];
printf("Nhap mot chuoi ky tu %s: "); gets(name);
Trang 15L ý kết thú h ỗi
Lưu ý: kết thúc chuỗi
#include <stdio.h>
{
char other[] = "Tony Blurt";
Blurt sẽ không được in ra
printf( %s\n , other);
other[4] = '\0';
Tony return 0;
}