第7章「C控制語句 分支和跳轉」介紹了ctype.h系列字符相關的函數。這些函數不能被 應用於整個字符串,可是能夠被應用於字符串中的個別字符。程序清單11.26定義了一個函數,它把toupper( )函數應用於一個字符串中的每一個字符,這樣就能夠把整個字符串轉換成大寫。此外,程序還定義了一個使用isputct( )函數計算一個字符串中的標點字符個數的函數。函數
程序清單11.26 mod_str.c程序編碼
/*mod_str.c 修改一個字符串*/ #include <stdio.h> #include <string.h> #include <ctype.h> #define LIMIT 80 void ToUpper(char *); int PunctCount(const char *); int main(void) { char line[LIMIT]; puts("Please enter a line: "); gets(line); ToUpper(line); puts(line); printf("That line has %d punctuation characters.\n",PunctCount(line)); return 0; } void ToUpper(char * str) { while(*str) { *str=toupper(*str); str++; } } int PunctCount(const char *str) { int ct=0; while(*str) { if(ispunct(*str)) ct++; str++; } return ct; } 下面是輸出: Please enter a line: Me? You talkin' to me? Get outta here! ME? YOU TALKIN' TO ME? GET OUTTA HERE! That line has 4 punctuation characters.
循環while(*str)處理str指向的字符串的每一個字符,直到碰見空字符。當遇到空字符時,*str的值爲0(空字符的編碼),即爲假,則循環結束。code
順便提一下,cype.h函數一般被做爲宏來實現。這些C預處理器指令的做用很像函數,可是有一些重要差異。在第16章 C預處理器和C庫 中咱們會介紹宏。字符串
接下來,咱們討論main()函數圓括號中的void(11.8)。get