C語言中文網 目錄

strspn和strcpn函數,C語言strspn和strcpn函數詳解

strspn 函數表示從字符串 s 的第一個字符開始,逐個檢查字符與字符串 accept 中的字符是否不相同,如果不相同,則停止檢查,并返回以字符串 s 開頭連續包含字符串 accept 內的字符數目。其函數原型的一般格式如下:

size_t strspn(const char *s, const char *accept);

例如,該函數的定義如下:
size_t strspn (const char *s,const char *accept)
{
    const char *p;
    const char *a;
    size_t count = 0;
    for (p = s; *p != '\0'; ++p)
    {
        for (a = accept; *a != '\0'; ++a)
            if (*p == *a)
                break;
            if (*a == '\0')
                return count;
            else
                ++count;
    }
    return count;
}
從上面的示例代碼中可以看出,strspn 函數從字符串參數 s 的開頭計算連續的字符,而這些字符完全是 accept 所指字符串中的字符。簡單地說,如果 strspn 函數返回的數值為 n,則代表字符串 s 開頭連續有 n 個字符都屬于字符串 accept 內的字符。

函數的調用示例如下面的代碼所示:
int main(void)
{
    char str[] = "I welcome any ideas from readers, of course.";
    printf("I wel:%d\n",strspn(str,"I wel"));
    printf("Iwel:%d\n",strspn(str,"Iwel"));
    printf("welcome:%d\n",strspn(str,"welcome"));
    printf("5:%d\n",strspn(str,"5"));
    return 0;
}
在上面的示例代碼中,因為 strspn 函數返回的是以字符串 s 開頭連續包含字符串 accept 內的字符數目。而源字符串 str 中的“I”與“welcome”之間有一個空格(即“I welcome”),所以,語句“strspn(str,"Iwel")”將返回 1,而語句“strspn(str,"I wel")”將返回 5。因此,輸出結果為:
I wel:5
Iwel:1
welcome:0
5:0

相對于 strspn 函數,strcspn 函數與之相反,它表示從字符串 s 第一個字符開始,逐個檢查字符與 reject 中的字符是否相同,如果相同,則停止檢查,并返回以字符串 s 開頭連續不含字符串 reject 內的字符數目。其函數原型的一般格式如下:

size_t strcspn(const char *s, const char *reject);

該函數的定義如下:
size_t strcspn (const char *s,const char *reject)
{
    size_t count = 0;
    while (*s != '\0')
        if (strchr (reject, *s++) == NULL)
            ++count;
        else
            return count;
    return count;
}
從上面的代碼中不難發現,strcspn 函數正好與 strspn 函數相反。strcspn 函數從字符串參數 s 的開頭計算連續的字符,而這些字符都完全不在參數 reject 所指的字符串中。簡單地說,如果 strcspn 函數返回的數值為 n,則代表字符串 s 開頭連續有 n 個字符都不包含字符串 reject 內的字符。

函數的調用示例如下面的代碼所示:
int main(void)
{
    char str[] = "I welcome any ideas from readers, of course.";
    printf("I wel:%d\n",strcspn(str,"I wel"));
    printf("Iwel:%d\n",strcspn(str,"Iwel"));
    printf("welcome:%d\n",strcspn(str,"welcome"));
    printf("5:%d\n",strcspn(str,"5"));
    return 0;
}
在上面的示例代碼中,因為 strcspn 函數返回的是以字符串 s 開頭連續不包含字符串 accept 內的字符數目。因此,其運行結果為:
I wel:0
Iwel:0
welcome:2
5:45

由此可見,對于 strspn 函數,如果找到了 reject 與 s 不相同元素時,指針停止移動,并返回以字符串 s 開頭連續包含字符串 accept 內的字符數目;而 strncspn 函數則是找到了 reject 與 s 相同元素時,指針停止移動,并返回以字符串 s 開頭連續不包含字符串 accept 內的字符數目。這一點一定要注意,千萬不要混淆了。

精美而實用的網站,提供C語言、C++、STL、Linux、Shell、Java、Go語言等教程,以及socket、GCC、vi、Swing、設計模式、JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo