淺談strtok函數的使用心得

經常使用strtok函數進行文本操作,其實他是一個很好用的函數,很方便,能夠簡單的實現一行文本的切分操作,總結一下使用心得。

函數原型char* strtok(char* s,const char* delim)

首先strtok有兩個參數,第一個參數是要操作的數據的地址或稱爲指針,通常是通過fget(buff,length(buff),p)函數來獲取的,這裏buff就是char* s,本人經常獲取文本的一行數據進行操作,所以這是一貫套路,當然有例外。第二個參數就是分隔符,使用最多的分隔符就是" "(空格),TAB(製表符)等等操作符,本人經操作的是空格符號爲分隔符。所以當讀取s指向的字符串中遇到分隔符時,就會把分隔符改成'\0'返回這個片段的指針或地址。舉個例子來說明問題,這裏有一個待處理文本如下:

xiaoming 123456 shanghai

zhangming 123 shangdong

hanmeimei 987 beijing

這裏有三行文本,每一行有三個屬性,名字,編號,地址構成,這裏就需要你實現顯示每一行的每個屬性的功能。

#include<iostream>

#include<stdio.h>

#include<string.h>

using namespace std;

int main(int argc,char **argv)

{

string strname,strid,straddress;

char buff[256];

FILE *p;

p=fopen("data.txt","r");

while(fgets(buff,256,p)!=NULL)

{

strname=strtok(buff," ");//這裏要注意的是一行文本中在第一次使用strtok的時候,第一個參數要使用待處理數據的首地址

strid=strtok(NULL," ");//但是在該行的以後使用中第一個參數就要用NULL,這一點很重要,往往被人忽視

straddress=strtok(NULL,"\n");//更加要注意的一點是,在分割該行最後一個屬性的時候,很多人對於分隔符的選取仍然是" "(空格),這樣是不正

//確的,應該使用"\n"來分割,因爲最後的符號是"\n"而不是空格,如果繼續使用空格作爲分隔符的話,那麼最後一個屬性就多了一個"\n"了。

cout<<strname<<" "<<strid<<" "<<straddress<<endl;

}

return 0;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章