1. 程式人生 > >梓益C語言學習筆記之常用字符串操作(sscanf & strtok)

梓益C語言學習筆記之常用字符串操作(sscanf & strtok)

C語言 字符串操作

梓益C語言學習筆記之常用字符串操作(sscanf & strtok)

一、sscanf

int sscanf(const char *buf,const char *format, …); \\從buf指定的內存區域中讀入信息

例: int a, b, c;

sscanf("2013:10:1", "%d:%d:%d", &a, &b, &c);

printf(“%d %d %d\n”,a,b,c);


sscanf()的正則表達式是從頭向後順序查找匹配字符,找不到就返回錯誤,如下面的幾個例子:

char src[] = "abcdefABCD123@456EFGghi";//一個buf只對應一個%,%*可以用多次

sscanf(src, "%[A-Z]", buf);//buf=空,遇到A-Z以外的字符就停止,%表示選擇,%後面的表示條件,條件s表示任意字符

sscanf(src, "%[^A-Z]", buf);//buf=abcdef,^表示取反,即遇到A-Z之間的字符就結束

sscanf(src, "%[^A]", buf);//buf=abcdef,從左向右獲取除A以外的字符,直到A結果

sscanf(src, "%*[^A]", buf);//buf=空,*表示後面匹配的字符不保存([^A]本應該是abcdef,但因加了*所以沒有了即過濾掉了)

sscanf(src, "%*[^A]%s", buf);//buf=ABCD123@456EFGghi,s表示獲取字符串,雖然前面沒有保存字符,但後面的字符可以獲得並保存

sscanf(src, "%*[^A]%[^@]", buf);//buf=ABCD123,直到遇到A並包含A結束

sscanf(src, "%*[^A]A%[^@]", buf);//buf=BCD123,直到遇到A但不包含A結束,A為定界符


二、strtok

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


#include <stdio.h>

#include <string.h>

int main()

{

char str1[]="adc*fvcv*!ebcy!hghbdfg*casdert";

char *str2="*!";

char *result[10];

int num=0,i;

result[num]=strtok(str1,str2);

while(result[num]!=NULL)

{

num++;

result[num]=strtok(NULL,str2);

}

for(i=0;i<num;i++)

printf("result[%d]=%s\n",i,result[i]);

return 0;

}


梓益C語言學習筆記之常用字符串操作(sscanf & strtok)