一、字符串函数介绍:
字符串作为程序中常用的数据类型,学会对字符串进行处理是作为一名C/C++程序员的基本功,我们要学会使用相关函数,并且对重点函数要会自己手动实现(下文对重点函数有实现代码以及相关示例)
二、字符串函数详解
1.strlen:
作用:求字符串的大小
使用:
实现:
size_t MyStrlen1(const char* str)
{
assert(str!=nullptr);
int len = 0;
while (str[len] != '\0')
len++;
return len;
}
示例:
int main()
{
const char* str = "123456";
printf("%d\n", strlen(str));
printf("%d\n", MyStrlen1(str));
return 0;
}
注意:strlen记录字符串函数大小,不包括'\0';
2.strcpy:
作用:将source字符串拷贝到destnation
使用:
实现:
char* MyStrcpy(char* destination, const char* source)
{
assert(destination != nullptr);
assert(source != nullptr);
int pos = 0;
while (source[pos] != '\0')
{
destination[pos] = source[pos];
pos++;
}
destination[pos] = '\0';
return destination;
}
示例:
int main()
{
const char* str = "123456";
char* str1 = (char*)malloc(strlen(str) + 1);
printf("%s", strcpy(str1, str));
printf("%s", MyStrcpy(str1, str));
return 0;
}
3.strncpy:
作用:从source字符串拷贝指定长度到destnation字符串中
使用:
4.strcmp:
作用:字符串的比较
使用:
实现:
int MyStrcmp(const char* dst, const char* src)
{
int pos1 = 0,pos2=0;
while (dst[pos1]==src[pos2]&&dst[pos1]!='\0')
{
pos1++;
pos2++;
}
return dst[pos1] - src[pos2];
}
示例:
int main()
{
const char* str = "123456";
const char* str1 = "123456";
printf("%d\n", strcmp(str1, str));
printf("%d", MyStrcmp(str1, str));
return 0;
}
5.strncmp:
作用:指定长度的字符串比较
使用:
6.strcat:
作用:字符串的拼接
使用:
实现:
char* MyStrcat(char* destination, const char* source)
{
assert(destination != nullptr);
assert(source != nullptr);
size_t pos1 = MyStrlen1(destination);
size_t pos2 = 0;
while (source[pos2] != '\0')
destination[pos1++] = source[pos2++];
destination[pos1] = '\0';
return destination;
}
示例:
int main()
{
char str[80];
char str1[80];
strcpy(str, "these ");
MyStrcpy(str1, "these ");
strcat(str, "strings ");
MyStrcat(str1, "strings ");
strcat(str, "are ");
MyStrcat(str1, "are ");
strcat(str, "concatenated.");
MyStrcat(str1, "concatenated.");
printf("%s\n", str);
printf("%s\n", str1);
return 0;
}
7.strncat:
作用:将source的指定长度字符串拼接到目标字符串末尾
使用:
8.strstr:
作用:查找子字符串在一个字符串的首次出现位置
使用:
实现:
char* MyStrstr(char* dst, const char* src)
{
assert(dst);
assert(src);
int pos1 = 0;
while (dst[pos1]!='\0')
{
int pos2 = 0;
if (dst[pos1] == src[pos2])
{
int pos = pos1;
while (dst[pos] == src[pos2])
{
pos++;
pos2++;
}
if (src[pos2] == '\0')
return dst + pos1;
}
pos1++;
}
return dst;
}
示例:
int main()
{
char str[] = "This is a simple string";
char str1[] = "This is a simple string";
char* pch;
char* pch1;
pch = strstr(str, "simple");
pch1 = MyStrstr(str1, "simple");
if (pch != NULL)
strncpy(pch, "sample", 6);
if(pch1!=nullptr)
strncpy(pch1, "sample", 6);
printf("%s\n", pch);
printf("%s", pch1);
return 0;
}
9.strtok:
作用:将字符串按照指定的分割符切割成多个子串
使用:
示例:
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;
}
三、总结:
学会使用常见字符串的函数,处理好字符串等各种问题,对我们在项目工程等方面有非常重要的基础作用,例如解决算法问题、网络协议的制定、C++string类实现等等,当然本篇文章只讲述了常用的字符串函数,对于其他函数,有兴趣的朋友们可以看一下如下网址:<cstring> (string.h) - C++ Reference
还有一个简单的思维导图,方便大家复习巩固
结语:
以上就是我分享的字符串函数的全部内容了,希望对大家有些帮助,也希望与一样喜欢编程的朋友们共进步
谢谢观看
如果觉得还阔以的话,三连一下,以后会持续更新的,我会加油的
祝大家早安午安晚安