1. 程式人生 > >C語言字串高階處理(三)strspn,strcspn,strtok

C語言字串高階處理(三)strspn,strcspn,strtok

高階字串查詢

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;
}

結果和上面的一樣,

另外還有幾點要注意的地方可以參考:

https://blog.csdn.net/chillpolaris/article/details/79830812