1. 程式人生 > 其它 >字元查詢函式strstr,strtok,錯誤資訊函式strerror

字元查詢函式strstr,strtok,錯誤資訊函式strerror

技術標籤:c語言c語言

目錄

strstr函式

描述

C 庫函式 char *strstr(const char *haystack, const char *needle) 在字串 haystack 中查詢第一次出現字串 needle 的位置,不包含終止符 ‘\0’。

宣告

char *strstr(const char *haystack, const char *needle)

引數

haystack – 要被檢索的 C 字串。
needle – 在 haystack 字串內要搜尋的小字串。

返回值

該函式返回在 haystack 中第一次出現 needle 字串的位置,如果未找到則返回 null。

使用

int main()
{
	char *p1 = "abcdefgddddddddrrrr";
	char *p2 = "ddddd";
	char* ret = strstr(p1, p2);
	if (ret == NULL)
	{
		printf("不存在");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

在這裡插入圖片描述

模擬實現

#include
<stdio.h>
#include <assert.h> char* my_strstr(char*p1, char*p2) { assert(p1 != NULL); assert(p2 != NULL); char*s1 = p1; char*s2 = p2; char*s3 = p1; while (*s3) { s1 = s3; s2 = p2; while ((*s1 != '\0') && (s2 != '\0') && (*s1 == *s2)) { s1++; s2++; } if
(*s2 == 0) { return s3; } s3++; } return NULL; } int main() { char *p1 = "abcdefgh"; char *p2 = "def"; char* ret = my_strstr(p1, p2); if (ret == NULL) { printf("不存在\n"); } else { printf("%s\n", ret); } return 0; }

strtok函式

描述

1.分解字串為一組字串。s為要分解的字串,delim為分隔符字元(如果傳入字串,則傳入的字串中每個字元均為分割符)。首次呼叫時,s指向要分解的字串,之後再次呼叫要把s設成NULL。
2.第一個引數指定一個字串,它包含了0個或者多個由sep字串中一個或者多個分隔符分割的標記。
3.strtok函式找到str中的下一個標記,並將其用 \0 結尾,返回一個指向這個標記的指標。(注:strtok函式會改變被操作的字串,所以在使用strtok函式切分的字串一般都是臨時拷貝的內容並且可修改。)
4.strtok函式的第一個引數不為 NULL ,函式將找到str中第一個標記,strtok函式將儲存它在字串中的位置。
5strtok函式的第一個引數為 NULL ,函式將在同一個字串中被儲存的位置開始,查詢下一個標記。
如果字串中不存在更多的標記,則返回 NULL 指標。

宣告

char *strtok(char s[], const char *delim);

返回值

從s開頭開始的一個個被分割的串。當s中的字元查詢到末尾時,返回NULL。
如果查詢不到delim中的字元時,返回當前strtok的字串的指標。

使用

int main()
{
	char arr[] = "[email protected]";
	char *p = "@.";
	char buf[1024] = { 0 };
	strcpy(buf, arr);
	char*ret = NULL;
	for (ret = strtok(arr, p); ret != NULL; ret = strtok(NULL, p))
	{
		printf("%s\n", ret);
	}
	return 0;
}

在這裡插入圖片描述

strerror

char * strerror ( int errnum );
strerror 
返回錯誤碼,所對應的錯誤資訊。 
/* strerror example : error list */ 
#include <stdio.h> 
#include <string.h> 
#include <errno.h>//必須包含的標頭檔案