c/c++常见字符串函数(strlen,strcmp,strcat,strcpy,strstr,strncpy,strncat,strncmp)的详解和自己编辑实现

下面介绍c语言中指针与数组的面试题
 再看下列题之前首先要知识储备
下面用c语言介绍常用字符串函数和进行编译
一.

介绍strlen函数
unsigned int strlen(char* s)或size_t strlen(const char* string);,其中size_t实际上是unsigned int。
功能:计算给定字符串的长度,
(!!!不包括'\0'在内)

#include<iostream>
using namespace std;
unsigned int my_strlen(char* s);
int main()
{
	char s[20] = { "dsjhskdj"};
	cout << my_strlen(s);
}
unsigned int my_strlen(char* s)
{
	unsigned int count=0;
	while (*s)
	{
		count++;
		s++;
	}
	return count;
}

二.介绍strcat函数
char *strcat(char *dest, const char *src);
把src所指向的字符串(包括“\0”)复制到dest所指向的字符串后面(删除*dest原来末尾的“\0”)。

注意:
1)要保证*dest足够长,以容纳被复制进来的*src。

2)*src中原有的字符不变。返回指向dest的指针。(src和dest所指内存区域不可以重叠:不能这样用strcat(dest,dest);

#include<iostream>
using namespace std;
char* my_strcat(char* s1, const char* s2);
int main()
{
	char s1[20] = { "jsdjhf" };
	char s2[10] = { "djshj" };
	cout<<my_strcat(s1, s2);
}
char* my_strcat(char* s1, const char* s2)
{
	char* s3 = s1;
	while (*s1)
	{
		s1++;
	}
	while(*s2)
	{
		*s1 = *s2;
		s2++;
		s1++;
	}
	*s1 =*s2 ;
	return s3;
}

三.介绍strcpy函数
原型声明:char* strcpy(char* dest, const char* src);
功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间
注意:

1.src和dest所指内存区域不可以重叠 dest必须有足够的空间来容纳src的字符串。
2.返回指向dest的指针。

#include<iostream>
using namespace std;
char* my_strcpy(char* dest, const char* src);
int main()
{
	char s1[20] = { "sakjs" };
	char s2[20] = { "sdjh" };
	my_strcpy(s1, s2);
	cout <<s1;
 }
char* my_strcpy(char* dest, const char* src)
{
	while((*dest=*src)!=0)
	{
		src++;
		dest++;
	}
	return dest;
}

四.介绍strcmp。

strcmp函数是string compare的缩写,
用于比较两个字符串并根据比较结果返回整数。
int strcmp(char*str1,char *str2),
若str1 = str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。

#include<iostream>
using namespace std;
int my_strcmp(char* str1, char* str2);
int main()
{
	char s1[20] = { "dgfskuj" };
	char s2[20] = { "dgfskuj" };
	int ret = my_strcmp(s1, s2);
	if (ret > 0)
		cout << "s1大于s2";
	else 
	{
		if (ret < 0)
			cout << "s1小于s2";
		else
		cout << "s1等于s2";
	}
	return 0;
}
int my_strcmp(char* str1, char* str2)
{
	while(*str1==*str2&&*str1&&str2)
	{
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

五.介绍strstr函数

char* strstr(char* str1,char* str2) 函数用于判断字符串str2是否是str1的子串。
如果是,则该函数返回 str1字符串从 str2第一次出现的位置开始到 str1结尾的字符串;
否则,返回NULL。
功能:strstr返回一个指针,指向string2在string1中首次出现的位置。 
返回类型:字符串类型
传入参数:参数一、参数二都是字符串类型
!!!寻找某字符串在另一字符串中第一次出现的位置,并返回查找到字符串的位置之后的全部字符串。 
注意
(1)参数一是字符串类型的参数,要传入的是被查找的字符串。
(2)参数二是字符串类型的参数,传入的是要查找的字符串。
(3)strstr函数会寻找参数二在参数中出现的位置,
并返回查找到字符串的位置之后的全部字符串。
当没有查找到符合的字符串时,返回NULL
(4) strstr函数在查找时,大小写会被认为是不同的字符串。

#include<iostream>
using namespace std;
char* my_strstr(char* str1, char* str2);
int main()
{
	char s1[20] = { "abbbdsxd" };
	char s2[20] = { "bbd" };
	cout<<my_strstr(s1, s2);
}
char* my_strstr(char* str1, char* str2)
{
	char* t1;
	char*t2;
	for (t1=str1,t2=str2; *str1 != '\0'; t1++,str1=t1,str2=t2)
	{
		while (*str1 == *str2)
		{
			str1++;
			str2++;
			if (*str2 == '\0')
				return t1;
		}
	}
	return NULL;
}

六.介绍strncpy,strncat,strncmp。

strncpy:strncpy函数用于将指定长度的字符串复制到字符数组中,是 C语言的库函数之一。

语法形式为:char *strncpy(char *dest, const char *src, int n),表示把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。 

通俗讲就是strncpy(s1,''JGl'',2):就是把"JG"复制到s1中。

其余两个函数类比。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值