C語言字串高階處理(三)strspn,strcspn,strtok
阿新 • • 發佈:2018-12-09
高階字串查詢
strspn():函式返回字串STR1中第一個不包含於字串STR2的字元的索引或者理解為STR1包含STR2任一字元的字元長度。
strcspn():函式返回STR1開頭連續Ñ個字元都不含字串STR2內字元的字元數或者理解為STR1不包含STR2任一字元的字元長度。
的的strtok():函式返回字串STR1中緊接“標記”的部分的指標,字串STR2是作為標記的分隔符如果分隔標記沒有找到,函式返回NULL為了將字串轉換成標記,第一。次呼叫STR1指向作為標記的分隔符之後所有的呼叫。STR1都應為NULL或者理解為切割字串,將海峽切分成一個個子串,STR1:在第一次被呼叫的時間STR1是傳入需要被切割字串的首地址;在後面呼叫的時間傳入NULL.str1:表示切割字串(字串中每個字元都會當作分割符)當分隔符中的所有字元查詢到末尾時 (即查詢完畢),返回NULL; 如果查不到STR2所標示的字元,則返回當前的strtok的的的字串的指標。
#include <string.h>
size_t strspn( const char *str1, const char *str2 );
size_t strcspn( const char *str1, const char *str2 );
char *strtok( char *str1, const char *str2 );
先看前兩個:
#include <stdio.h> #include <string.h> int main() { char *str1 = "hello world"; char *str2 = "hel"; char *str3 = "rld"; printf("%s包含%s任一字元的長度是%lu\n",str1,str2,strspn(str1,str2)); printf("%s不包含%s任一字元的長度是%lu\n",str1,str3,strcspn(str1,str3)); return 0; }
strtok函式
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "[email protected]@[email protected]";
char *temp = NULL;
temp = strtok(str,"@");
while(temp)
{
printf("%s\n",temp);
temp = strtok(NULL,"@");
}
return 0;
}
我想使用字元指標直接表示字串,如下,結果出現段錯誤了,不知道大家有沒有和我一樣的疑惑,所以後來研究了下
//char str[] = "[email protected]@[email protected]";
char *str = "[email protected]@[email protected]";
是因為這裡的str是字串的指標指向的是字串常量,即const型別,所以這裡不允許修改
修改成下面的就可以了:
#include <stdio.h>
#include <string.h>
int main()
{
char *p = "[email protected]@[email protected]";
char str[50];
char *temp = NULL;
strcpy(str,p);
temp = strtok(str,"@");
while(temp)
{
printf("str=%s temp=%s\n",str,temp);
temp = strtok(NULL,"@");
}
return 0;
}
結果和上面的一樣,
另外還有幾點要注意的地方可以參考: