字元查詢函式strstr,strtok,錯誤資訊函式strerror
阿新 • • 發佈:2021-02-04
目錄
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>//必須包含的標頭檔案