String 1 String/ 1.: char s1[10]; char *s2; char s3[] = "Chan Tai Man"; char s4[20] = "Chan Siu Ming"; char s5[]={'h','e','l','l','o','\0'; 0 1 2 3 4 5 6 7 8 9 10 11 12 s3 C h a n T a i \0 M a n \0 printf ("%s\n", s3); s3[8]='\0'; printf ("%s\n", s3); 2
2. char s[]="game Over\n"; printf (s); printf ("Game Over\n"); printf ("Game" " " "Over" "\n"); // printf ("%s\n", s); (stdout, "%s", s); (s, stdout); 3 3. scanf ("%s", s); gets (s); scanf ("%s%s", firstname, lastname); fgets (s, 20, stdin); & fscanf (stdin, "%s", s); //?? keyboard 4
4. 'c'-'c'=99-67 char s[10]="chan tm", t[10]="chan TM"; if (strcmp(s,t)==0) printf ("%s=%s\n", s, t); if (strcmp(s,t)<0 ) printf ("%s<%s\n", s, t); if (strcmp(s,t)>0 ) printf ("%s>%s\n", s, t); n = stricmp(s,t); 0 // ignore cases ('A' = 'a') 32 ' ' 48 '0' 49 '1' 64 '@' 65 'A' 66 'B' 67 'C' 97 'a' 98 'b' 99 'c' 5 4. int Compare (const char *s1, const char *s2){ while(*s1==*s2){ if(*s1=='\0' && *s2=='\0') return 0; s1++; s2++; if(*s1>*s2) return 1; return -1; main(){ char s[10]="chan tm", t[10]="chan TM"; n = Compare (s, t); 6
5. FILE *fp, *fp2; // file pointers // fp = fopen ("abc.txt", "r"); // read fp2 = fopen ("xyz.txt", "w"); // write while (! feof(fp) ){ // // fgets (s, 20, fp); printf ("%s", s); fprintf (fp2, "%s", s); fclose (fp); fclose (fp2); // // 7 5. / fprintf (fp, "%s", s); fputs (s, fp); / fgets (s, 10, fp); // (10char) fscanf (fp, "%s", s); fscanf (fp, "%i", &n); Chan TM Chan Tai Man 50 70 90 60 77 88 66 55 8
6. char s[20]="face", t[20]; n=strlen (s); // length s = "face"; strcpy (s, "face"); "fac" strncpy (t, s, 3); strncpy (t, s+1, 3); "ace" s f s+1 a s+2 c s+3 e s+4 \0 // illegal // copy t = s[0]+s[1]+s[2] t = s[1]+s[2]+s[3] 9 6.() char s[20], t[20]; if (s=="face").. if (strcmp (s, "face")==0 ).. // illegal // if (strstr (s,".txt")==null) // s".txt" strcat (s,".txt"); // concatenate char s[]="a123456(7)"; printf("%s", ); s s+1 s+2 printf("%c", ); s[0] s[1] printf("%i", ); s[0] s[1] 10
: char *p, key; p = str ("abc.txt html jpg", ' '); printf ("%s", p); p = strrchr ("abc.txt html jpg", ' '); printf ("%s", p); if (str ("abc.txt html jpg", "txt")) printf ("txt!\n"); printf ("Q: [Y]es [N]o [C]ancel "); do{ key = toupper (getch()); while ( ("YNC", key) == NULL); YNC 11 char name[40][20]; strcpy(name[0],"chan tai man"); // copy gets(name[2]); scanf ("%s",name[2]); for (i=0;i<40;i++) (name[i]); // 40 for (i=0;i<40;i++) (name[i]); // 40 for (i=0;i<40;i++) puts (name ); // 40 12
char school[7] = "ABLMCC"; for (i=0; i<strlen(school); (school) i++) printf ("% \n", school ); char dow [4] ={"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" A B L M C C school[0] school[5] for (i=0;i<7;i++) printf ("% \n", dow ); Sun Mon Tue Wed Thu Fri Sat dow[0] dow[6] 13 school[0] "" char school[7] = "ABLMCC"; school[5] 6 'A',,'C' dow[6][0] dow[6][1] dow[6][2] char dow[7][4] ={"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"; dow[0] dow[4] dow[6] 14
char s[13] ="chan tai man"; s = toupper (s); for (i=0; i<12; i++) = toupper ( ); s[0] = toupper (s[0]); = toupper ( ); s[10] = toupper (s[10]); s[11] = toupper (s[11]); () printf ("%s\n", s); CHAN TAI MAN printf ("%s\n", (s) ); printf ("%s\n", (s) ); printf ( %s\n, (s) ); // upper // lower // reverse 15 char cno[5] ="1A01", t[3]="99"; gets (cno); ok=0; if ( (cno)==4){ ok=1; if ( cno[0]<'1' cno[1] cno[2] if (ok==1){ strncpy(t, ); n = atoi(t); // if ( ) ok=0; if (ok==0) printf("error\n"); ) ok=0; 16
char idno[11] ="A123456(7)"; gets (idno); ok=0; if ( ==10 && idno[0]>= && idno[0]<= ){ ok=1; for (i=1; ; i++) if ( ) ok=0; if (! ( ok=0; ) ) if (ok==0) printf("error\n"); 17 char idno[11] ="A123456(7)"; gets (idno); sum=58*9 + ( )*8 ; for (i=1; i<7; i++) sum += if (idno[8]=='a') else sum += (idno[1] )* 7; sum += (idno[2] )* 6; sum += (idno[5] )* 3; sum += (idno[6] )* 2; if (sum ) printf ("Valid\n"); else printf ("Invalid\n"); printf("%s", ); idno idno+1 idno+2 printf("%c", ); idno[0] idno[1] printf("%i", ); idno[0] idno[1] 18
7.: (b) Q: Enter text: Chan Tai Man A: 12 char, 4 vowels, 2 spaces : Q: Enter text: A: Bye (c) Q: Enter text: Chan Tai Man A: ChanTaiMan : Q: Enter text: A: Bye (a) Q: Enter text: Chan Tai Man Q: n=? 2 A: s[2] = 'a', "Ch" : s[2]='\0'; ChanTaiMan han TaiMan antaiman ntaiman C H A N C H A N 19 8.: (a) Q: Enter Name: Chan A: You are Chan : Q: Enter Name: QUIT A: Bye (c) Q: Enter alphabet: D No.of letters: 5 A: DEFGH (b) Q: Enter password: 1314 A: Incorrect! : Q: Enter password: axe A: correct! (d) n = posn ("banana", "ana"); issym = symmetric ("ana"); issym = symmetric ("bana"); palindrome ("abc", s); palindrome ("cba", s); n = anagram ("act", "cat"); 20
(1) 文字 String 測驗 http://www.ablmcc.edu.hk/~scy/home/javascript/strncpy.swf (0) char name[30]="chan_tai_man"; // 來源 source strcpy (name, "Chan Tai Man"); name = "Chan Tai Man"; // 文字複製 // 錯誤! (1) int p = 5, n = 3 ; // 起點 (p) 字元數目 (n) (2) char ch = name [p]; // 抽取第 p 個字元 ( 字符 ) (3) char dst[30]; 1 strcpy (dst, name); 2 strncpy (dst, name, n); 3 strncpy (dst, name+p, n); (4) char str[ ]="520"; strcat (str,dst); x = strlen (str); // 目的地 destination // 文字複製 copy // 部分複製 dst[] // dst[] // 文字合併 concatenate (str str+dst) // str[] // x (2) 複製部分字串 strncpy(target 目標, source 來源, length 長度 ); char t[20]; // target char s[20] = "a1b3c5d7e90p2q4r6s8t"; 先選取上面 部分字串, 再按確定 (3) 複製部分字串 strncpy(target 目標, source 來源, length 長度 ); char t[20] = "xyzopqr"; char s[11] = "a1b3c5d7e9"; strncpy (t+1, s+4, 4); t (4) Relational Operators & String Comparison 測驗 strcmp.swf 文字 compare 比較 : '0'=48, 'A'=65, 'B'=66, 'a'=97, 'b'=98 n = strcmp ("ab","bc"); n = strcmp ("ab","ab"); n = strcmp ("ba","ab"); (5) input: "abs","abs","abst","ab","cab" char input[10]; // 文字 char grade; // 單字 / 字符 等於 == if(strcmp(input,"abs") ==0)... if(grade == 'A')... 不等於!= if(strcmp(input,"abs")!=0)... if(grade!= 'U')... 大於 > if(strcmp(input,"abs") >0)... if(grade > 'C')... 小於 < if(strcmp(input,"abs") <0)... if(grade < 'F')... 請填上 (==,!=,<,>) "abs" "Abs" "abst" "ab" "cab"
-and-char.doc Feb 09,2012 A. 一般變數 類別 變數名稱宣告句子 輸入句子 1 文字 name char name[10]="a123"; gets ( ); 2 字符 grade char grade ='A'; scanf (" ", &grade); 3 整數 mark int mark =100; scanf (" ", &mark); 4 小數 average float average; scanf (" ", &average); B. 陣列類別 變數名稱宣告陣列 for (i=0;i<100;i++) 1 文字 name char names[100][10]; gets( ); 2 字符 grade char grades[100]; scanf("%c", &grades ); 3 整數 mark int marks[100]; scanf("%i", &marks ); 4 小數 average float avgs[100]; scanf("%f", &avgs ); C. 文字 :char name[20] = "Chan Tai Man", t[20]; 1 字長 strlen n = strlen(name); 2 複製 strcpy strcpy (t, name); 3 複製 strncpy strncpy (t, name+, 4); // "an T" 4 比較 strcmp n = strcmp (t, ); 5 單字 / 字符 name[0], name[1],..., name[ ] 6 轉大寫 for (i=0; i<strlen(name); i++) name = toupper(name ); 7 輸出 printf ("%s", name); for (i=0; i<strlen(name); i++) printf (" ", name ); D. 文字陣列 :char names[100][10] = {"Chan KK","Chan YY","Chan 7"; for (i=0; i<100; i++){ 1 字長 strlen n = strlen(names ); 2 複製 strcpy strcpy (t, names ); 3 複製 strncpy strncpy (t, names, 4); 4 比較 strcmp n = strcmp (t, names ); 5 單字 / 字符 names [2]='e'; names [4]=','; 6 轉大寫 for (i=0; i<strlen(names[0]); i++) names[0] names = toupper(names ); 7 輸出文字 printf (" ", names[0]); 8 輸出 for (i=0; i<strlen(names[0]); i++) printf (" ", names[0] ); p.1