日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

函数strtol和strtok详解[通俗易懂](Excel函数公式大全)

發布時間:2023/12/19 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 函数strtol和strtok详解[通俗易懂](Excel函数公式大全) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、strtol()函數的原型為:

long int strtol(const char *nptr, char **endptr, int base);

函數的解釋說明
  這個函數會將參數nptr字符串根據參數base來轉換成長整型數。參數base范圍從2至36,或0。參數base代表采的進制方式,如base值為10則采用10進制,若base值為16則采用16進制等。當base值為0時則是采用10進制做轉換,但遇到如’0x’前置字符則會使用16進制做轉換、遇到’0’前置字符而不是’0x’的時候會使用8進制做轉換。一開始strtol()會掃描參數nptr字符串,跳過前面的空格字符,直到遇上數字或正負符號才開始做轉換,再遇到非數字或字符串結束時(‘\0’)結束轉換,并將結果返回。若參數endptr不為NULL,則會將遇到不合條件而終止的nptr中的字符指針由endptr返回。

strtol是atoi的增強版
主要體現在這幾方面:
  1、不僅可以識別十進制整數,還可以識別其它進制的整數,取決于base參數,比如strtol(“0XDEADbeE~~”, NULL, 16)返回0xdeadbee的值,strtol(“0777~~”, NULL, 8)返回0777的值。

2、endptr是一個傳出參數,函數返回時指向后面未被識別的第一個字符。例如char *pos; strtol(“123abc”, &pos, 10);,strtol返回123,pos指向字符串中的字母a。如果字符串開頭沒有可識別的整數,例如char *pos; strtol(“ABCabc”, &pos, 10);,則strtol返回0,pos指向字符串開頭,可以據此判斷這種出錯的情況,而這是atoi處理不了的。

3、如果字符串中的整數值超出long int的表示范圍(上溢或下溢),則strtol返回它所能表示的最大(或最小)整數,并設置errno為ERANGE,例如strtol(“0XDEADbeef~~”, NULL, 16)返回0x7fffffff并設置errno為ERANGE

多數情況下,endptr設置為NULL, 即不返回非法字符串。

atoi函數原型為:

int atoi(const char *nptr);

用法:將字符串里的數字字符轉化為整形數。返回整形值。

注意:轉化時跳過前面的空格字符,直到遇上數字或正負符號才開始做轉換,而再遇到非數字或字符串結束時(‘/0’)才結束轉換,并將結果返回。

例:

int main()
{
    char *ptr1 = "-12345.12";
    char *ptr2 = "+1234w34";
    char *ptr3 = "   456er12";
    char *ptr4 = "789 123";
    int a,b,c,d;

    a = atoi(ptr1);
    b = atoi(ptr2);
    c = atoi(ptr3);
    d = atoi(ptr4);

    printf("a = %d, b = %d, c = %d, d = %d/n", a,b,c,d);

    return 0;
}

輸出結果:
a = 12345

b = 1234

c = 456

d = 789

下面看幾個例子:

char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 2));
printf("%s\n", stop);

輸出結果:

2

379cend$3

char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 8));
printf("%s\n", stop);

輸出結果:

543

9cend$3

char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 10));
printf("%s\n", stop);

輸出結果:

10379

cend$3

char buffer[20]="10379cend$3";
char *stop;
printf("%d\n",strtol(buffer, &stop, 16));
printf("%s\n", stop);

輸出結果:

17005006

nd$3

另外,如果base為0,且字符串不是以0x(或者0X)開頭,則按十進制進行轉化。如果base為0或者16,并且字符串以0x(或者0X)開頭,那么,x(或者X)被忽略,字符串按16進制轉化。如果base不等于0和16,并且字符串以0x(或者0X)開頭,那么x被視為非法字符。
例如:

char buffer[20]="0x31da6c";
char *stop;
printf("%d\n",strtol(buffer, &stop, 0));
printf("%s\n", stop);

輸出結果:

3267180

(stop為空)

char buffer[20]="0x31da6c";
char *stop;
printf("%d\n",strtol(buffer, &stop, 13));
printf("%s\n", stop);

輸出結果:

0

0x31da6c

最后,需要說明的是,對于nptr指向的字符串,其開頭和結尾處的空格被忽視,字符串中間的空格被視為非法字符。
例如:

char buffer_1[20]="10379c";
char buffer_2[20]="      10379c        ";
char buffer_3[20]="      10      379c        ";
printf("%d\n",strtol(buffer_1,NULL,0));
printf("%d\n",strtol(buffer_2,NULL,0));
printf("%d\n",strtol(buffer_3,NULL,0));

輸出結果為:

10379

10379

10

二、strtok的函數原型為:

char *strtok(char *s, char *delim)

功能為“Parse S into tokens separated by characters in DELIM.If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. ” 翻譯成漢語就是:作用于字符串s,以包含在delim中的字符為分界符,將s切分成一個個子串;如果,s為空值NULL,則函數保存的指針SAVE_PTR在下一次調用中將作為起始位置。

函數的返回值為從指向被分割的子串的指針。

這個定義和國內一些網站上的說法有一些差別,正是這些差別導致很多人對strtok沒有一個正確的認識。希望讀者在調用一些函數前,最好能夠讀一讀官方的文檔(多半都是英文的),而非看一些以訛傳訛的資料。

使用strtok需要注意的有以下幾點:

函數的作用是分解字符串,所謂分解,即沒有生成新串,只是在s所指向的內容上做了些手腳而已。因此,源字符串s發生了變化!

最典型用法:

int main( void )
{
	char string[] = "A string ,,tokens and some     more tokens";
	char seps[]   = " ";
	char *token;

    token = strtok( string, seps ); // C4996
    // Note: strtok is deprecated; consider using strtok_s instead
    while( token != NULL )
    {
        // While there are tokens in "string"
        printf( "%s\n", token );
        // Get next token: 
        token = strtok( NULL, seps ); // C4996
    }
}

關于strtok函數的用法見鏈接:http://blog.csdn.net/liuintermilan/article/details/6280816

總結

以上是生活随笔為你收集整理的函数strtol和strtok详解[通俗易懂](Excel函数公式大全)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。