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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

字符分割函数strtok

發布時間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 字符分割函数strtok 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

分割函數strtok

  • 一、strtok()基本使用和介紹
  • 二、strtok()注意事項
  • 三、strtok()函數源碼

一、strtok()基本使用和介紹

1、函數原型

char *strtok(char *str, const char *delim)

2、參數

  • str—要被分解的字符串
  • delim—用作分隔符的字符(可以是一個,也可以是集合)

3、返回值

  • 該函數返回被分解的第一個子字符串,若無可檢索的字符串,則返回空指針

4、實例代碼

#include <string.h> #include <stdio.h>int main () {char str[80] = "aaa - bbb - ccc";const char s[2] = "-"; //字符串里可以是一個分隔符,也可以是分隔符的集合char *token;/* 獲取第一個子字符串 */token = strtok(str, s);/* 繼續獲取其他的子字符串 */while( token != NULL ) {printf( "%s\n", token );token = strtok(NULL, s);}return(0); }

編譯運行

在這里我們可以看出strtok的基本使用方法

  • 第一次調用strtok(),傳入的參數str是要被分割的字符串{aaa - bbb -ccc},而成功后返回的是第一個子字符串{aaa};

  • 而第二次調用strtok的時候,傳入的參數應該為NULL,使得該函數默認使用上一次未分割完的字符串繼續分割 ,就從上一次分割的位置{aaa-}作為本次分割的起始位置,直到分割結束。

  • 二、strtok()注意事項

    (1)delim 替換成 \0

    • 在這個函數里strtok()在分解字符串的時候,第一個參數str是在不斷變化的,這個函數是在改變原字符串,把原字符串{aaa - bbb - ccc}通過第二個參數delim將所有的分割符{-}替換成字符串結束標志字符{\0},則原字符串變化為{aaa \0 bbb \0 ccc}
    • 錯誤示例:
    #include <string.h> #include <stdio.h>int main () {char *str = "aaa - bbb - ccc"; //****注意這里!const char s[2] = "-";char *token;/* 獲取第一個子字符串 */token = strtok(str, s);/* 繼續獲取其他的子字符串 */while( token != NULL ) {printf( "%s\n", token );token = strtok(NULL, s);}return(0); }

    注意:在這里,我實現函數的時候將字符串數組直接用指針指向它了,結果運行錯誤,后面發現雖然第一個參數是可以傳指針,但我們要考慮空間內存布局,在strtok()函數里是delim的{分隔符}替換{ \0}改變原字符串,而我們用指針指向這個字符串的時候,其實指向的是字符串常量,它的內存分布在文字常量區是不可被改變的,所以出現了錯誤!

    (2)delim分隔符

    • strtok()的第二個參數delim,我看了很多博客都使用一個分隔符的示例,其實delim里可以是所有分隔符的集合,比如{aaa - bbb ; ccc | ddd},第二個參數delim可以是{-;|},用一個或多個分隔符去分解字符串都可以

    (3)delim分隔符可不可以出現在第一個字符?

    • 答案是:可以
      當strtok分解的字符串首字符就是分隔符,那么strtok()會忽略首個分隔符,直接從第二個分隔符往下繼續分解,例如:{- aaa - bbb - ccc} 那么strtok()會忽略第一個{-},還是以{aaa - bbb - ccc}的字符串形式繼續分解。

    三、strtok()函數源碼

    有的小伙伴可能想了解源碼,在這里也貼上

    char *strtok(char *str,const char *delim) {static char *next_start = NULL; //保存到靜態存儲區,函數返回后不會被銷毀if(str == NULL && (str = next_start) == NULL){return NULL;}char *s = str;const char *t = NULL;while(*s){t = delim;while(*t){if(*t == *s){next_start = s + 1;if(s == str) //第一個字符就是分隔符{str = next_start;break;}else{*s = '\0';return str;}}else{t++;}}s++;}return NULL; }

    關于這個函數在項目編程中需要經常使用,所以就搜集資料整理成自己的學習筆記了,如有不對,留言改正!

    總結

    以上是生活随笔為你收集整理的字符分割函数strtok的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 欧美激情小视频 | 啪啪导航 | 欧美一a一片一级一片 | 久久久久久久久久一区二区三区 | 91精品国产综合久久香蕉 | 男女视频久久 | 污污视频网站在线免费观看 | 国产一区二区三区四区精 | 奇米视频在线观看 | 国产丰满大乳奶水在线视频 | 茄子爱啪啪| 九色视频国产 | 中文字幕免费高清在线 | 精品91在线| 国产精品免费看 | 性久久久久久久 | 精品日韩一区二区三区 | 欧美另类高清videos的特点 | 悠悠色综合 | 久久久96| 性chinese天美传媒麻 | 久久久久国产一区二区三区 | 久久精品视频16 | 亚洲自偷自偷偷色无码中文 | 欧美体内谢she精2性欧美 | 久久色播 | 欧美香蕉视频 | 黄色三级a | 亚洲自拍av在线 | 国产欧美一区二区三区在线 | 成人在线观看91 | 欧美日韩生活片 | 五月激情av | 98精品国产 | 高潮一区二区三区 | 中文人妻av久久人妻18 | 免费日b视频 | 草草草在线 | 精品国产制服丝袜高跟 | 蜜臀av性久久久久蜜臀av麻豆 | 一区二区三区手机在线观看 | 婷婷超碰 | 综合色影院 | 国产情侣呻吟对白高潮 | 国产欧美精品区一区二区三区 | 91看片就是不一样 | av资源中文在线 | 欧美日韩国产一区二区在线观看 | 黄色片女人| 黄色免费片 | 亚洲色图欧美色 | 8050午夜二级 | 日韩在线一区二区 | 亚洲视频在线观看一区二区 | 黄色片子一级 | 亚洲一区二区在线电影 | 欧美日韩精品在线观看视频 | japanese24hdxxxx日韩 | 黄色资源在线播放 | 四色成人av永久网址 | 国产aⅴ精品一区二区三区久久 | 国产猛男猛女超爽免费视频 | 亚洲视频在线观看 | 国产一区欧美日韩 | 天天视频黄 | av资源库| 久久免费片| 久久久精品在线 | 狠狠干b | 日本五十路女优 | 国产精选在线观看 | 国产一级视频免费观看 | 用力抵着尿进去了h | 狠狠干夜夜干 | 亚洲免费视频一区 | av中文资源网 | 欧洲色视频 | 美女黄色一级片 | 色就是色欧美 | 亚洲国产成人在线观看 | 亚洲综合成人网 | 四虎4hu永久免费网站影院 | 99r热 | 黄色动漫免费在线观看 | 欧洲精品码一区二区三区免费看 | 午夜精品久久久久久久91蜜桃 | 蜜臀av无码精品人妻色欲 | 爱操av| 国产成人精品免高潮费视频 | 国产精品一二三区在线观看 | 伊人情人综合 | 国产精品久久久久久久久毛片 | 成人片黄网站色大片免费毛片 | 97网站| 亚洲综合插 | 秋霞精品一区二区三区 | 欧美老女人性视频 | 91av在线免费 | 成年人一级片 |