标签:
实现字符串相关函数:
Strcpy(), strlen(), strcat(), atoi()
Strcpy():
#include<stdio.h>
char *strcpy(char *strDest,char *strsrc)
{
if(NULL==strDest||NULL==strsrc) //判断参数的有效性
{
return NULL;
}
char *strTemp=strDest; //保存目标字符串的首地址,如果不保存,直接对strDest进行操作,那么strDest都不知道指到哪去了,无法返还strDest的首地址
while((*strDest++=*strsrc++)!=‘\0‘);/*这个分号要注意,如果不加;
的话,后面的return是while循环的循环体*/ //这个while等价于下面的while循环语句
/*while(strsrc!=‘\0‘)
{
strDest=strsrc;
strsrc++;
strDest++;
}*/
return strTemp;
}
int main()
{
char src[]="hello,world";
char Dest[20];
strcpy(Dest,src);
printf("%s\n",Dest);
return 0;
}
//strlen的实现
#include<stdio.h>
int strLen(const char *strsrc)
{
int len=0; //保存长度
while(*strsrc!=‘\0‘)
{
strsrc++;
len++;
}
return len;
}
int main()
{
char src[]="hello,world";
printf("%d\n",strLen(src));
return 0;
}
/* strlen是计算字符串的长度,不包含‘/0‘,遇到‘/0‘停止
* 输出结果:11
strcat()
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *strCat(char *dest,char *src)
{
char *p=dest; //保存目标字符串的首地址,供最后返回使用
while(*dest!=‘\0‘)
{
dest++;
} //此时的dest指向目标数组的‘\0‘
while(*dest=*src)
{
dest++; //dest向一个新空间移,src向之前的dest移
src++;
}
return p;
}
int main()
{
char p[10]="12345";
char q[10]="678";
strCat(p,q);
printf("%s\n",p);
return 0;
}
Input: I am a student
Output: student a am I
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char *reverse_word(const char *str)
{
int len=strlen(str);
//printf("len=%d",len);
char *restr=(char *)malloc(sizeof(char)*(len+1));//申请restr的内存空间
strcpy(restr,str);
printf("%s\n",restr);
int i,j;
for(i=0,j=len-1;i<j;i++,j--)
{ //整个字符串逆转
char temp=restr[i];
restr[i]=restr[j];
restr[j]=temp;
}
int k=0;
while(restr[k]!=0)
{
i=j=k;
while(restr[j]!=‘ ‘&&restr[j]!=0) //遇到空格就是下一个字符串了
j++;
k=j+1;
j--;
for(;i<j;i++,j--)
{ //每个字符串逆转
char temp=restr[i];
restr[i]=restr[j];
restr[j]=temp;
}
}
printf("%s\n",restr);
}
标签:
原文地址:http://www.cnblogs.com/FG123/p/4660761.html