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;
}
我们可以看到,函数原型实现中cnt与i有重复,故我们可以改进一下
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);
}
}
}