C Primer Plus 第11章 字符串和字符串函數 11.4 自定義字符串I/O函數

不必定要使用標準C庫的函數進行輸入和輸出。若是不具有或者不喜歡它們,您能夠自行定義,在getchar() putchar()的基礎上創建本身的函數。程序員

假定您但願有一個相似puts()但並不自動添加換行符的函數。程序清單11.10給出了一種方法。數組

程序清單11.10  put1.c程序函數

/*put1.c  不添加換行符打印一個字符串*/
#include <stdio.h>
void put1(const char *string) /*不會改變這個字符串*/
{
    while(*string !='\0')
        putchar(*string++);
}

char指針string最初指向被調參數的第一個元素。因爲這個函數並不改變字符串,所以使用了const修飾符。這一元素的內容輸出之後,指針遞增並指向下一個元素。這個過程一直繼續下去,直到指針指向一個包含空字符的元素。記住,++比*的優先級高,這意味着putchar(*string++)輸出string指向的值,而後再增長string自己,而不是增長stirng指向的字符指針

能夠把put1.c看做自定義字符串處理函數的範例。每一個字符串都有一個空字符標誌其結束,所以沒必要向函數傳遞字符串的大小。相反,函數依次處理每一個字符直到遇到空字符。code

用數組符號寫這個函數會比較長:索引

int i = 0;
while(string[i]!='\0')
    putchar(string[i++]);

其中用到了一個做爲索引的額外變量。字符串

不少C程序員會在while循環中使用下面的判斷條件:get

while (*string)

當string指向空字符時,*string的值0,這將結束循環。上面的語句被普遍使用。字符串處理

**說明  爲何程序清單11.10用const char *string而不用const char string[]做爲形式參數?從技術上來講,兩者等價,所以它們都有效。用方括號符號的一個用意 是提醒用戶這個函數處理的是數組。但在使用字符串時,實際的參數能夠是數組名、引發來的字符串,或被聲明爲char*類型的變量。使用const char *string能夠提醒您實際的參數不必定是一個數組。string

假定您但願有一個相似puts()的函數,而且這個函數還能夠給出輸出的字符個數。如程序清單11.11所示,添加這一功能很簡單。

程序清單 11.11  put2.c程序

/*put2.c  打印一個字符串,並統計其中的字符個數*/
#include <stdio.h>
int put2(const char *string) /*不會改變這個字符串*/
{
    int count=0;
    while(*sting)
        {
        putchar(*string++);
        count++;
        }
    putchar('\n');
    return (count);
}

下面的調用輸出字符串pizza:

put2("pizza");

下面的調用還返回一個字符計數值,並把該值賦給num。在本例中這個值是5。

num=put2("pizza") ;

程序清單11.12 給出了一個使用put1()和put2()的驅動程序,其中還使用了嵌套的函數調用。

程序清單11.12  put_put.c 程序

/*put2.c  打印一個字符串,並統計其中的字符個數*/
#include <stdio.h>
void put1(const char *string);
int put2(const char *string); /*不會改變這個字符串*/

int main(void)
{
    put1("If I'd as much money");
    put1(" as I could spend, \n");
    printf("I count %d characters.\n",
           put2("I never would cry old chairs to mend. "));
    return 0;
}
void put1(const char *string)
{
    while(*string)
        putchar(*string++);
}

int put2(const char *string)
{
    int count=0;
    while(*string)
        {
        putchar(*string++);
        count++;
        }
    putchar('\n');
    return (count);
}

咱們使用printf()輸出put2()的值。可是在計算put2()的過程當中,計算機必須先執行這個函數,這樣就輸出了其中的字符串。

If I'd as much money as I could spend,
I never would cry old chairs to mend.
I count 38 characters.
相關文章
相關標籤/搜索