C Primer Plus 第11章 11.7 ctype.h字符函數和字符串

第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

相關文章
相關標籤/搜索