str函数(头文件:string.h)
=================目录=====================
=====================================
一、str函数
1.strlen--------求字符串长度
int strlen(const char* string)
①参数
- string---------字符串
②返回值
- 字符串长度
③注意事项
- 返回值类型为unsigned int
- 遇到\0结束
- 不包含\0
strlen的模拟实现 - my_strlen
int my_strlen(const char* string) {
assert(string != NULL);
int count = 0;
while (*string) {
string++;
count++;
}
return count;
}
2.strcpy-------字符串拷贝
将src拷贝在des中
char* my_strcpy(char* des, const char* src)
①参数
- des---------指向要复制内容的目标数组的指针。
- src----------要复制的C字符串。
②返回值
- des的起始地址
③注意事项
- 返回值类型为char*
- 遇到\0结束
- 不包含\0
strcpy的模拟实现 - my_strcpy
char* my_strcpy(char* des, const char* src) {
assert(des != NULL);
assert(src != NULL);
char* ret = des;
while (*des = *src) {
des++;
src++;
}
return ret;
}
strncpy-------字符串拷贝
将size大小的src拷贝到des中
char* my_strcpy(char* des, const char* src,size_t size)
①参数
- des---------指向要复制内容的目标数组的指针。
- src----------要复制的C字符串。
- size---------要复制的字符串的大小。
②返回值
- des的起始地址
3.strcat--------字符串追加
将src追加到des后面
char* my_strcat(char* des, const char* src)
①参数
- des---------指向目标数组的指针
- src----------要追加的字符串
②返回值
- des的起始地址
③注意事项
- 返回值类型为char*
- 遇到\0结束
- des字符串数组需要足够大,大到可以包含des和src数组的追加结果字符串
- 不包含\0
strcat的模拟实现 - my_strcat
char* my_strcat(char* des, const char* src) {
assert(des != NULL);
assert(src != NULL);
char* ret = des;
while (*des) {
des++;
}
while (*des++ = *src++) {
}
return ret;
}
strncat---------------字符串追加
将固定大小的src追加在des后面
char* my_strncat(char* des, const char* src,size_t size)
①参数
- des--------指向目标数组的指针
- src---------要追加的字符串
- size--------要追加的最大字符数
②返回值
- des的起始地址
③注意事项
- 不将src中\0追加,但追加结束后 + 一个\0
4.strcmp—字符串的比较、
比较2字符串的ASCII值(一个字符一个字符比较,若相同,找下一个)
int my_strcmp(const char* str1, const char* str2)
①参数
- str1---------要比较的字符串
- str2---------要比较的字符串
②返回值
strcmp的模拟实现 - my_strcmp
int my_strcmp(const char* str1, const char* str2) {
while (*str1 == *str2) {
if (*str1 = '\0') {
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}
strncmp—字符串的比较
比较2字符串size长度的ASCII值
int my_strcmp(const char* str1, const char* str2,size_t size)
①参数
- str1---------要比较的字符串
- str2---------要比较的字符串
- size---------要比较的最大字符数
②返回值
5.strstr-----查找字符串
将str2在str1中查找,并输出str2及之后的字符串
char* my_strstr(const charstr1, const charstr2)
①参数
- str1---------要扫描的字符串
- str2---------待查找字符串
②返回值
- str1中str2出现时的指针
③注意事项
- 若找不到,返回NULL指针
strstr的模拟实现 - my_strstr
char* my_strstr(const char*str1, const char*str2) {
const char* cp = str1;
const char* c = str2;
const char* s1 = str1;
const char* s2 = str2;
while (*cp) {
s1 = cp;
s2 = c;
while (*s1 == *s2 && *s1 && *s2) {
s1++;
s2++;
}
if (*s2 == '\0') {
return (char*)cp;
}
cp++;
}
return NULL;
}
6.strtok(str,sym)----查找特殊符号
在str1里查找stm(str2为各种字符,例:@),并记录初始地址
char * strtok ( char * str, const char * sym )
①参数
- str1---------要扫描的字符串
- str2---------待查找特殊符号
②返回值
- str1中str2出现时的指针
③注意事项
- 若找不到,返回NULL指针
- 可以指定一个空指针,在这种情况下,该函数将继续扫描以前对该函数的成功调用结束的位置
strtok的应用举例:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "- This, a sample string.";
char* pch;
printf("Splitting string \"%s\" into tokens:\n", str);
pch = strtok(str, ",.-");
while (pch != NULL)
{
printf("%s\n", pch);
pch = strtok(NULL, " ,.-");
}
return 0;
}
7.strerror(a)----------把错误码翻译成错误信息
char * strerror ( int errnum );
①参数
- errnum----------------错误号
②返回值
- 指向描述错误errnum的错误字符串的指针。
③注意事项
- errno----------------C语言自带的全局变量,0就是没错,默认在其中放0
- perror(“函数名::realloc”)–输出错误信息(函数名::realloc + “:” + 空格 + 错误信息)
8.strchr---------字符串中搜索一个字符
const charstrchr(const char str,int character)
①参数
- str----------------要搜索的字符串
- character-----------------要搜索的字符
②返回值
- 这个字符出现在字符串中的位置指针