当前位置 博文首页 > Geek宝宝的努力!:C语言:自定义字符串函数
任务代码:
字符串复制(自定义函数):
指针法1:
#include <stdio.h>
char *scopy(char *str1,const char *str2);//最后返回的是一个字符串也就是字符数组,所以用指针返回
int main()
{
char s1[50];
char s2[]="i am happy!";
scopy(s1,s2);
printf("%s\n",s1);
return 0;
}
char *scopy(char *str1,const char *str2)
{
int i=0,j=0;
while(str2[j]!='\0')
{
str1[i]=str2[j];
i++;
j++;
}
str1[i]='\0';//字符数组结束的标志
return str1;
}
指针法2:
#include <stdio.h>
char *scopy(char str1[],const char str2[]);
int main()
{
char s1[50];
char s2[]="i am happy!";
scopy(s1,s2);
printf("%s\n",s1);
return 0;
}
char *scopy(char *str1,const char *str2)
{
char *p1=str1;
const char *p2=str2;
while(*p2!='\0')
{
*p1=*p2;
p1++;
p2++;
}
*p1='\0';
return p1;
}
char *scopy(char *str1,const char *str2)
{
char *p1=str1;
const char *p2=str2;
while(*p1)
{
*p1++=*p2++;//因为到最后的p2结束时为空,所以赋值给p1后判断p1为空结束
}
*p1='\0';
return p1;
}
#include <stdio.h>
char *scopy(char str1[],const char str2[]);//最后返回的是一个数组,所以使用指针返回
int main()
{
char s1[50];
char s2[]="i am happy!";
scopy(s1,s2);
printf("%s\n",s1);
return 0;
}
char *scopy(char str1[],const char str2[])
{
int i=0,j=0;
while(str2[j]!='\0')
{
str1[i++]=str2[j++];
}
str1[i]='\0';
return str1;
}
比较字符串(自定义函数):
#include <stdio.h>
#include <ctype.h>
int scomp(char str1[],const char str2[]);//因为是返回值是一个数字来确定是否是对比相同,所以返回int
int main()
{
char s1[]="I A haPpy!";
char s2[]="i am happy!";
int index;
index=scomp(s1,s2);
printf("%d",index);
return 0;
}
int scomp(char *str1,const char *str2)
{
const char *p=str1,*q=str2;
while(tolower(*p)==tolower(*q)&&*p!='\0'&&*q!='\0')//tolower是把大写字母转换成小写字母,其作用可惜忽视大小写带来的问题
{
p++;
q++;
}
if(tolower(*p)>tolower(*q))
{
return 1;
}
else if(tolower(*p)<tolower(*q))
{
return -1;
}
else return 0;//相等的,返回0
}
#include <stdio.h>
#include <ctype.h>
int scomp(char str1[],const char str2[]);//因为是返回值是一个数字来确定是否是对比相同,所以返回int
int main()
{
char s1[]="I A haPpy!";
char s2[]="i am happy!";
int index;
index=scomp(s1,s2);
printf("%d",index);
return 0;
}
int scomp(char *str1,const char *str2)
{
int i=0;
char c1,c2;
do
{
c1=(str1[i]>='A'&& str1[i]<='Z')?str1[i]+32:str1[i];//这里使用技巧,指导所有的小写字母都比大些字母的ASEII码大32
c2=(str2[i]>='A'&& str2[i]<='Z')?str2[i]+32:str2[i];
i++;
}while(c1==c2 && c1!='\0' && c2!='\0');//如果没有不相等或者循环玩结束
if(c1>c2)
{
return 1;
}
else if(c1>c2)
{
return -1;
}
else return 0;
}
#include <stdio.h>
int wordnum(const char *str);
int main()
{
char s[81];
gets(s);
printf(" \"%s\" have %d words.\n",s,wordnum(s));
return 0;
}
int wordnum(const char *str)
{
int i,num=0,word=0;//word不计数,只是一个开关
for(i=0;(*(str+i)!='\0');i++)
{
if(*(str+i)==' ')
word=0;
else if(word==0)//既不是空格又不是0代表这个单词还没有完
{
word=1;
num++;
}
}
return num;
}