String文字/字符串 2009年1月5日 Szeto CY #include 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'}; ---------------------------- s3 |C|h|a|n| |T|a|i| |M|a|n|\0| 字元陣列 ---------------------------- s3[8]='\0'; char m[9] = "I like C"; char m[] = "I like C"; char m[] = {'I',' ','l','i','k','e',' ','C'}; char s[30] = "c programming "; char s[30] = {"c programming "}; // 可不加{} char s = "c programming "; // illegal不合法 char s[30] = c programming ; // illegal不合法 char s[30] = { c programming }; // illegal不合法 char s[30] = { c,p,r,o,g,r,a }; // illegal不合法 char s[30] = {'C','H','I','N'}; // 可以,但不方便 char s[30]; // 可以,但未初始化 char *s = "c++"; char s[20] = "Initial value"; 2.輸出 char s[]="Game Over\n"; printf(s); printf("Game Over\n"); printf("Game" " " "Over" "\n"); // 不用逗號 printf("%s\n",s); puts(s); fprintf(stdout,"%s",s); fputs(s,stdout); 3.輸入 scanf("%s",s); gets(s); scanf("%s%s",firstname,lastname); // 會否混亂?? fgets(s,20,stdin); fscanf(stdin,"%s",s); 4.比較 char s1[]="chan tm", s2[]="Chan TM"; if(strcmp(s1,s2)==0) printf("%s=%s\n",s1,s2); if(strcmp(s1,s2)< 0) printf("%s<%s\n",s1,s2); if(strcmp(s1,s2)> 0) printf("%s>%s\n",s1,s2); int StringCompare(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; } 5.文字檔 FILE *fp; 輸出/寫入 fp=fopen("abc.txt","w"); // write fprintf(fp,"%s",s); fputs(s,fp); 輸入/讀取 fp=fopen("abc.txt","r"); // read fgets(s,20,fp); // max: 20 char fscanf(fp,"%s",s); 6.常用函數 n=strlen(s); // string length 字串字長 s = "c programming"; // illegal 不合法 strcpy(s,"xyz"); // string copy 複製字串 if(s=="xyz").. // illegal 不合法 if(!strcmp(s,"xyz")).. // string compare 比較字串 if(strstr(s,".txt")==NULL) // 字串s不包含".txt" strcat(s,".txt"); // string concatenate 連接字串 實例: main(){ char key,*p; p = strchr("abc.txt html jpg",' '); printf("p = [%s]\n",p); p = strrchr("abc.txt html jpg",' '); printf("p = [%s]\n",p); p = strstr("abc.txt html jpg","txt"); printf("p = [%s]\n",p); printf("Q: [Y]es [N]o [C]ancel "); do{ key = toupper(getch()); }while(strchr("YNC",key) == NULL); system("pause"); return 0; } 輸出: p = [ html jpg] p = [ jpg] p = [txt html jpg] Q: [Y]es [N]o [C]ancel 7.程式編寫練習: (a) Q: Enter Name: Chan A: You are Chan : Q: Enter Name: QUIT A: Bye. (b) Q: Enter password: abc A: Incorrect! : Q: Enter password: axe A: correct! (c) Q: Enter alphabet: D No.of letters: 5 A: DEFGH : (d) n = posn("banana","ana"); isSym = symmetric("ana"); isSym = symmetric("bana"); palindrome("abc",s); palindrome("cba",s); 8.字串陣列Array of string: see Array.txt and Array2D.txt 9.Sub-string: strncpy(t,s+p,n); main(){ char name[]="Chan Tai Man"; char surname[9], middleName[9]; strncpy(surname,name,4); // Chan (name[0]開始,取4字元) puts(surname); strncpy(middlename,name+5,3); // Tai (name[5]開始,取3字元) puts(middleName); system("pause"); return 0; }