- strlen 求字符串的长度,从起始位置开始计数器+1,遇到'\0'停止
- strcmp 比较两个字符串是否相等
(1)从2个字符串的第一个字符。开始依次比较字符的字典序。如果比较到最后,2个字符串一模一样,则返回零。如果比较到某个字符发现。 str1的该字符的字典序更大。则返回一个>0的数,str2的字典序更大,则返回一个小于零的数。
从下面这个实例可以看出2个字符串比较。前2个字符ab是一样的。当比较到第3个字符的时候,c的字典序小于f的字典序,则返回小于零的数。 VS编译器默认返回-1。
3.strcpy
(1)目标字符串空间必须足够大,确保可以存放源字符串。
(2)源字符串必须以'\0'结尾。
(3)会把原字符串的'\0'考到目标字符串。
4.strcat 字符串追加函数,将源字符串拷贝到目标字符串后面,
(1)目标字符串空间必须足够大
(2)源字符串必须以'\0'结尾,因为识别到源字符串到达'\0',拷贝才会结束
(3)不能自己给自己追加,若要实现,需使用strncat
从下面的实例可以看出,我们一定要提前给str 1分配足够的空间,比如说提前给它分配30个字符的空间。 要不然就会越界访问。
下面的567字符串函数。都带了一个n,表示指定操作n个字符。
5.strncat
(1) 拷贝原字符串中的num个字符追加到。 Str1的'\0'字符后面。(当然,一般'\0'是在字符串的末尾。)
(2)这个时候我们要注意。如果NUM小于原字符串的长度。在拷贝完NUM个字符之后,后面会默认在拷贝一个/0。
(3)如果NUM大于原字符串的长度。就会把原字符串,整体拷贝过去,追加到后面,就完了。
6.strncpy
(1)拷贝num个字符从原字符串到目标字符串空间。
(2)如果原字符串的长度小于num。则继续拷贝/0。直到总数为num个。
7.strncmp 比较两个字符串前num个字符是否相等
两个字符串的前2个字符相等,返回0
8.strstr 查找字符串
查找str2是否是str1的子串,用下面的例子说话,str2的第一个字符是d,那么如果是子串,返回str1里面第一个d的地址(str1里面可能有好几个def子串,但是只返回第一个d的地址
所以用ret接收,就会打印str1里面的从第一个d开始的剩下的字符串
下面是自己尝试写的strstr函数
int main()
{
char str1[] = "abcdeffffabcdef";
char str2[] = "def";
char* ret = my_strstr(str1, str2);
puts(ret);
const char* p = "abc";
p++;
puts(p);
}
char* my_strstr( char* str1, char* str2)
{
int len1 = strlen(str1);
int len2 = strlen(str2);
int num = len1 - len2 + 1;
while (num--)
{
char* newstr = str1;
char* sdr = str2;
int flag = 0;
for (int i = 0; i < len2; i++)
{
if (*(str1 + i) != *(str2 + i))
{
flag = 1;
}
}
if (flag == 0)
{
return newstr;
}
str1 = newstr + 1;
str2 = sdr;
}
return NULL;
}
9.strtok 分割字符串,详解:
(1)原型
(2)str是要被分割的字符串,delim是分隔符组成的字符串,可以是一个分隔符,可以是多个。
(3)返回值是一个字符指针
对于这串代码,我们来详细解释一下。
第一次调用strtok函数的时候。我们需要在第一个参数写arr,返回值为ret。那这个时候。我们把ret指向的字符串打印出来。就会打印出第一个第一个字符串"I"。那接下来我们再去调用strtok的时候。第一个参数就直接写上NULL就可以了。
这是strtok函数的特性。那这个时候我们调用第二次strtok,这时候返回的ret就会指向字符串“love"这个字符串的地址?打印出来”love"以此类推,再调用一次的话。指向的就是you这个字符串的地址。那么我们最后再调用一次。 ret就会指向"yan"这个字符串的地址。
所以我们可以看到第一次调用strtok函数的时候。第一个参数为arr。接下来每次调用的时候我们只需要把第一个参数设置为null就可以。每调用一次就会得到这一次分割出来的这一小段字符串。然后把它打印出来。
但是这样一次一次调用太挫了,所以说我们用一个for循环搞定。
比如一个字符串"I.love.you@yan",是由.和@分割的,而p字符串是".@"那么用下面的for循环,就可以打印出