string函数原型实现

strlen函数

形式:strlen(地址)
功能:测试一个字符串从标识的地址开始到**\0**的所有非\0的字符个数

#include <stdio.h>
#define n 81
int strlength(char s[])
{
	int i=0,cnt=0;
	while(s[i]!=\0)
	{
		cnt++;
		i++;
	}
	return cnt;
}
int main()
{
	char s[n];
	int cnt;
	printf("请输入一个字符串:\n");
	gets(s);
	cnt=strlength(s);
	printf("%d\n",cnt);
	return 0;
}

我们可以看到,函数原型实现中cnti有重复,故我们可以改进一下

int strlength(char s[])
{
	int i=0;
	while(s[i]){
	i++;
	}
	return i;
}

strcpy函数

1.形式:strcpy(目标地址,“字符串”)
功能:将字符串复制到从目标地址开始的连续的存储单元中
2.形式:strcpy(目标地址,原地址)
功能:将从原地址开始的字符串(含‘\0’)复制到从目标地址开始的连续的存储单元中

#include <stdio.h>
void stringcopy(char s2[],char s1[])
{
	int i=0,j=0;
	while(s2[i++]=s1[j++];)
}
int main()
{
	char s1[81],s2[81];
	printf("请输入原字符串:\n");
	gets(s1);
	stringcopy(s2,s1);
	puts(s2);
}

strcat函数

1.strcat(地址,“字符串”)
功能:从所给地址开始找到第一个’\0’,连接字符串
2.strcat(目标地址,原地址)
功能:将从原地址开始的字符串(包括’\0’),复制到目标地址开始的’\0’的连续的存储单元中

#include <stdio.h>
#include <string.h>
#define n 81
void stringstrcat(char s1[],char s2[])
{
	int i=strlen(s1),j=0;
	while(s1[i++]=s2[j++]);
}
int main()
{
	char s1[n],s2[n];
	printf("请输入两个字符串:\n");
	gets(s1);
	gets(s2);
	stringstrcat(s1,s2);
	puts(s1);
	return 0;
}

strcpy函数与strcat函数的区别
strcpy是将字符串从目标地址开始复制,对原字符串而言会有字符损失,strcat是将字符串从目标地址开始找到第一个’\0’再开始连接,不会有字符损失

经典例题

例:删除字符串s中给定的字符ch
方案一:

void delword(char s[],char ch)
{
	char r[81];
	int i=0,j=0;
	while(s[i])
	{
		if(s[i]!=ch)
			r[j++]=s[i];
		i++;
	}
	r[j]=s[i];
	strcpy(s,r);
}
int main()
{
	char s[81],ch;
	printf("请输入一个字符串:\n");
	gets(s);
	printf("请输入待删的字符:\n");
	scanf("%c",&ch);
	delword(s,ch);
	puts(s);
}

方案二:

void delword(char s[],char ch)
{
	int i,j;
	char r[81];
	for(i=0,j=0;s[i]==ch||r[j++]=s[i];i++);
	strcpy(s,r);
}

方案三:

void delword(char s[],char ch)
{
 int i,j;
 for(i=0,j=0;s[i]==ch||s[j++]=s[i];i++);
}

方案四:

void delword(char s[],char ch)
{
 int i;
 while(s[i]!='\0')
 {
	  if(s[i]-ch)
	   i++;
	  else 
	  {
	   s[i]='\0';
	   strcat(s,s+i+1);
	  }
  }
}

猜你喜欢

转载自blog.csdn.net/weixin_43917444/article/details/89422680