c语言字符串函数汇总

  1. strlen    求字符串的长度,从起始位置开始计数器+1,遇到'\0'停止
  2. 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循环,就可以打印出

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.别止步春天.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值